这道题思路如下:
(1)用一个cnt数组标记 所有出现的时刻,
(2)用另一数组ans从右往左遍历标记 一个工作表之外的任务请求所执行的时刻
#include <iostream>
#include <cmath>
#include <string.h>
#include <stdio.h>
const int MAX=110000;
using namespace std;
int cnt[2*MAX];
int ans[2*MAX];
int main()
{
int t,n,m,op,a;
cin>>t;
while(t--)
{
scanf("%d%d",&n,&m);
memset(cnt,0,sizeof(cnt));
memset(ans,0,sizeof(ans));
for(int i=1;i<=n;i++)
{
scanf("%d",&op);
cnt[op]++;
}
int now;
for(int i=200010;i>=1;i--) //必须有这步预处理 不然会超时
{
if(cnt[i]==0)
now=i;
ans[i]=now;
}
while(m--)
{
scanf("%d",&op);
printf("%d\n",ans[op]);
}
}
return 0;
}