[ABC290C] Max MEX 题解
Problem
给出一个长度为 \(N\) 的仅含非负整数的序列 \(A\),你需要从中选出 \(K\) 个数使得这 \(K\) 个数的 Mex 最大,其中 Mex 为未出现的最小非负整数。
\(1\leq K\leq N\leq 3\times 10^5\),\(0\leq A_i\leq 10^9\)。
Solution
贪心地想,由于可以随意取,那么可以对值域作标记,统计 \(0\) 到 \(K-1\) 是否出现,若均出现则 Mex 为 \(K\),反之则为最小的未出现的数字。
时间复杂度 \(\mathcal{O}(K)\)。
Code
// 丑陋的赛时代码,为省事直接用了 unordered_map,实际上只需要开 K 范围的标记数组就可以。
unordered_map<int,int> cnt;
int n,k,x;
signed main(){
n=read(),k=read();
F(i,1,n) ++cnt[read()];
while(x<k){
if (!cnt[x]) printf("%d",x),exit(0);
++x;
}
printf("%d",k);
return 0;
}

浙公网安备 33010602011771号