生活随笔
收集整理的這篇文章主要介紹了
AtCoder Beginner Contest 194 E - Mex Min 思维
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
傳送門(mén)
文章目錄
題意:
給你個(gè)長(zhǎng)度為nnn的數(shù)組,讓后一個(gè)mmm,問(wèn)對(duì)于所有的0<=i<n?m0<=i<n-m0<=i<n?m,求min(mex(Ai+1,...,Ai+2,Ai+M))min(mex(A_{i+1},...,A_{i+2},A_{i+M}))min(mex(Ai+1?,...,Ai+2?,Ai+M?))。
思路:
本來(lái)以為是個(gè)主席樹(shù),以前了解到過(guò)主席樹(shù)可以求mexmexmex,直接上主席樹(shù)應(yīng)該能過(guò)掉,雖然nnn有1e61e61e6。
當(dāng)然這個(gè)題沒(méi)有那么麻煩,我們只需要記一下每個(gè)數(shù)出現(xiàn)的位置,比如當(dāng)前數(shù)為iii,由于長(zhǎng)度是固定的mmm,如果這個(gè)數(shù)能在mexmexmex中出現(xiàn),那么這個(gè)數(shù)必定存在相鄰兩個(gè)數(shù)(當(dāng)然需要加上前后的邊界)之間間隔至少mmm個(gè)數(shù)。所以我們只需要查看一下是否存在間隔至少為mmm距離即可。
有很多這一類(lèi)的題都是記位置,想到這一點(diǎn)就很容易了。
#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std
;
typedef long long LL
;
typedef unsigned long long ULL
;
typedef pair
<int,int> PII
;const int N
=2000010,mod
=1e9+7,INF
=0x3f3f3f3f;
const double eps
=1e-6;int n
,m
;
int a
[N
],b
[N
];
vector
<int>v
[N
];int main()
{
cin
>>n
>>m
;for(int i
=1;i
<=n
;i
++) scanf("%d",&a
[i
]),v
[a
[i
]].pb(i
);for(int i
=0;i
<=n
+1;i
++){int pre
=0,flag
=0;v
[i
].pb(n
+1);for(int j
=0;j
<v
[i
].size();j
++){if(v
[i
][j
]-pre
>=m
+1) flag
=1;pre
=v
[i
][j
];}if(flag
) { cout
<<i
<<endl
; break; }}return 0;
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的AtCoder Beginner Contest 194 E - Mex Min 思维的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。