1 5 5 1 2 3 5 6 1 2 3 4 5
4 4 4 4 7
在z数组中, 每个i 代表一个时间点, 记录每个时间点后面最近的0位置到z[i]中,0代表没任务. 因为查询互不影响,所以每次 输出z[q]就是q时间的任务最快能被处理的时间点.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int time[312345],z[3123456];
int main()
{
int t,n,q,i,tem,flag;
scanf("%d",&t);
while(t--)
{
memset(z,0,sizeof(z));
scanf("%d%d",&n,&q);
for(i=1;i<=n;i++)
{
scanf("%d",&time[i]);
z[time[i]]=1;
}
for(i=200010;i>=0;i--)
{
if(z[i]==0)
{
flag=i;
}
z[i]=flag;
}
while(q--)
{
scanf("%d",&tem);
printf("%d\n",z[tem]);
}
}
return 0;
}
hdu 4908 Task schedule 需要预处理,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u013532224/article/details/38365615