AtCoder Beginner Contest 271 - C
背景
深深地被这道题折磨了一下午,于是决定写一篇题解
题目大意
给定一个数列,小T可以将其中两个数更改为另一个数,求最大值x,满足数列中1~x均存在
题解
我们从小往大找,如果这个值存在就跳过,不存在最大值就会-1
因为 n ≤ 3 × 1 0 5 n\leq 3\times 10^5 n≤3×105,所以桶只需要开到 3 × 1 0 5 3\times 10^5 3×105即可
#include<cstdio>
int n,t[300005];
int main(){
scanf("%d",&n);
for(int i=1,a;i<=n;i++) scanf("%d",&a),a>n?0:t[a]=1;
for(int i=1;i<=n;i++) if(!t[i]) n--;
printf("%d",n);
}