Loading

[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;
}
posted @ 2023-02-21 20:27  reechee  阅读(56)  评论(0)    收藏  举报