Problem Description

有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务。
有m个询问,每个询问有一个数字q,表示如果在q时间有一个工作表之外的任务请求,请计算何时这个任务才能被执行。
机器总是按照工作表执行,当机器空闲时立即执行工作表之外的任务请求。

Input

输入的第一行包含一个整数T, 表示一共有T组测试数据。
对于每组测试数据:
第一行是两个数字n, m,表示工作表里面有n个任务, 有m个询问;
第二行是n个不同的数字t1, t2, t3....tn,表示机器在ti时间执行第i个任务。
接下来m行,每一行有一个数字q,表示在q时间有一个工作表之外的任务请求。
特别提醒:m个询问之间是无关的。
[Technical Specification]
1. T <= 50
2. 1 <= n, m <= 10^5
3. 1 <= ti <= 2*10^5, 1 <= i <= n
4. 1 <= q <= 2*10^5

Output

对于每一个询问,请计算并输出该任务何时才能被执行,每个询问输出一行。

Sample Input

1
5 5
1 2 3 5 6
1
2
3
4
5

Sample Output

4
4
4
4
7
解题思路:题意说得很清楚了,注意m个询问之间是无关的。做法:预处理打表O(n),O(1)的询问,从后往前暴力枚举,如果当前时间点i没有被占用,那么就设置now为i,并且每次将时间点b[i]设置成now,表示目前在i时间有另外的任务请求对应需要在now这个时间点才被执行。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
const int maxn=;
int t,n,m,x,q,now,b[maxn];bool a[maxn];
int main(){
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d",&n,&m);
memset(a,false,sizeof(a));
memset(b,,sizeof(b));
for(int i=;i<=n;++i){scanf("%d",&x);a[x]=true;}
for(int i=maxn-;i>;--i){//从后往前枚举,如果该时间点没有占用,则直接用now这个时间
if(!a[i])now=i;//更换没有占用的最小时间
b[i]=now;//每一个任务只能延迟做
}
while(m--){
scanf("%d",&q);
printf("%d\n",b[q]);
}
}
}
return ;
}

最新文章

  1. javascript语言理解
  2. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十三)之附加功能-自定义皮肤
  3. mysql登录和连接 权限
  4. [转载] C++ string, const char*, char* 之间互相转换
  5. (C#) Lock - 将对象上锁,互斥多个线程,使同步。
  6. sublime 3 注册码
  7. 演义江湖PC端意见汇总
  8. 从python的yield说起
  9. 【mysql的编程专题⑥】视图
  10. response妙用
  11. tq2440+fedora安装qt4.5
  12. 【原创】Octovis在Ubuntu16.04下运行出现core dump的解决方案
  13. FaceRank-项目上了 GitHub Python Trending
  14. JavaScript基础-3
  15. Oracle列转行函数LISTAGG()
  16. Ultimate Weirdness of an Array CodeForces - 671C (gcd,线段树)
  17. L229 词汇题
  18. 使用github搭建个人html网站
  19. 软工网络15个人作业4--alpha阶段个人总结
  20. UTL_DBWS包的创建和用法

热门文章

  1. hash_map与unordered_map区别
  2. 【APUE】关于信号的一些常用函数
  3. 问题解决:FFmpeg视频编解码库,无法解析的外部信号
  4. HadoopMapReduce运行机制
  5. win7下装ubuntu双系统后无法进入win7的解决方法
  6. I2S简单学习
  7. 【JAVA】java中Future、FutureTask的使用
  8. RSA私钥加密公钥解密、各种密钥格式转换
  9. java集合的关系
  10. Lightoj 1006 Hex-a-bonacci