把所有空闲的时间保存到一个数组内,对于每次询问二分查找答案,因为Max设的小了被坑了几次,题目太坑了。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <map>
#define LL long long
#define FOR(i,x,y) for(int i=x;i<=y;i++)
#define rFOR(i,x,y) for(int i=x;i>=y;i--)
using namespace std;
const int maxn = 1000000 + 10;
int H[maxn];
int A[maxn];
int N , M;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&N,&M);
int tmp;
memset(H,0,sizeof(H));
memset(A,0,sizeof(A));
FOR(i,1,N)
{
scanf("%d",&tmp);
H[tmp] ++;
}
int Max = 200000;
int k = 0;
FOR(i,1,Max+1)
{
if(H[i] == 0)
{
A[++k] = i;
}
}
sort(A+1,A+1+k);
while(M--)
{
scanf("%d",&tmp);
int pos = lower_bound(A+1,A+1+k,tmp) - A;
printf("%d\n",A[pos]);
}
}
return 0;
}