题意:给出N个数和M次查询,每次查询是找到比自己大(或等于)的在N个数中不存在的第一个数。
用一个数组标记一个数是否存在,再找到这个数之后不存在的第一个数。
#include<cstdio>
#include<iostream>
using namespace std;
#define mem(a,b) memset(a,b,sizeof a);
const int N=100005;
int n,m,ans[2*N];
void solve(){
mem(ans,0);
ans[2*N-9]=2*N-9;//哨兵
scanf("%d %d",&n,&m);
for(int i=0,t;i<n;i++)
scanf("%d",&t),ans[t]=1;
for(int i=2*N-10;i>=0;i--){//找到后面第一个0
if(ans[i]==0) ans[i]=i;
else ans[i]=ans[i+1];
}
while(m--){
int q;
scanf("%d",&q);
printf("%d\n",ans[q]);
}
}
int main(){
int tt=1,cas;
cin>>tt;
for(cas=1;cas<=tt;cas++){
solve();
}
return 0;
}