题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4907
解题思路:就是把空余的时间单独用一个数组存起来,然后查找时用二分查找。但是这题却WA啦好多次,当时想死的心都有啦,后面才发现时数组开小了。。。
code:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int a[200010];
int b[200010];
int main()
{
int T,n,m,x,maxx,i;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
maxx=-1;
for(i=0;i<n;i++)
{
scanf("%d",&x);
//maxx=max(maxx,x);
a[x]=1;
}
//printf("%d\n",maxx);
int len=0;
for(i=1;i<=200005;i++)
{
if(a[i]==0)
{
b[len++]=i;
}
}
//b[len]=maxx+1;
while(m--)
{
scanf("%d",&x);
//if(x<=maxx)
{
int l=0,r=len-1,mid;
int flag=0;
while(l<=r)
{
mid=(l+r)/2;
if(b[mid]>x)
{
r=mid-1;
}
else if(b[mid]<x)
{
l=mid+1;
}
else if(b[mid]==x)
{
flag= 1;
printf("%d\n",b[mid]);
break;
}
}
if(!flag)printf("%d\n",b[l]);
}
}
}
return 0;
}