#6495. C:Bit 去哪了? (Where did Bit go?)

C:Bit 去哪了? (Where did Bit go?)

题目 C:Bit 去哪了? (Where did Bit go?)

项目 限制条件
输入文件 标准输入 (standard input)
输出文件 标准输出 (standard output)
时间限制 C++: 2秒, Pascal: 2秒, Java: 4秒, Python: 20秒
内存限制 256 MB
总分 100 分

题目背景

在发现他最喜欢的树今天早晨“跑步”的方式有些古怪后,Bit 神秘地失踪了。你怀疑这件事背后有秘密势力的影子,于是接管了“轨道指挥中心”,利用其扫描功能试图定位 Bit。

题目描述

你需要扫描的区域是一条由 NN 个区块组成的土地,从左到右排列。第一个区块的位置为 11,最后一个区块的位置为 NN

轨道指挥中心每次最多可以扫描 MM 个区块。由于轨道围绕地球运行,扫描的位置每经过一个时间步就会向右移动。 具体来说,给定 MM 个不同的整数 Z1<Z2<<ZMZ_1 < Z_2 < \dots < Z_M。在时间 tt,只有当存在索引 jj 使得 i=Zj+ti = Z_j + t 时,位置 ii 上的区块才会被扫描。

外部情报提供了关于 Bit 可能出现的优先位置:

  1. 每个区块都被分配了一个唯一的整数优先级(范围从 11NN)。
  2. 优先级越小,优先级越高11 是最高优先级,NN 是最低优先级)。
  3. 出于机密原因,所有区块的优先级是随机排列的。你可以假设每个区块的优先级是从前 NN 个正整数中随机抽样生成的排列。

你的任务: 编写一个程序上传到轨道指挥中心。在每个时间步,输出当前正在被扫描的区块中,优先级最高的区块的位置(Position)。如果该时间步没有任何有效区块被扫描,则输出 -1

输入格式

  • 第一行包含两个整数 N,MN, M
  • 第二行包含 NN 个整数,第 ii 个数(1iN1 \le i \le N)表示位置 ii 处区块的优先级。
  • 第三行包含 MM 个整数 Z1<Z2<<ZMZ_1 < Z_2 < \dots < Z_M

保证: 1N,M100,0001 \le N, M \le 100,000ZMNZ_M \le N,且 Z1>3×N3×MZ_1 > -3 \times N - 3 \times M

输出格式

在一行内输出 NZ1+1N - Z_1 + 1 个空格分隔的整数。 第 ii 个整数应为时间 t=i1t = i-1(从 t=0t=0 开始)时,被扫描的最高优先级区块的位置。若无区块被扫描,输出 -1

评分标准与子任务

子任务 分数 限制条件
1 20 N1000,M1000N \le 1000, M \le 1000
2 N100,M100,000N \le 100, M \le 100,000
3 N,M100,000N, M \le 100,000,且对于所有 i<Mi < M,满足 Zi+1=Zi+1Z_i + 1 = Z_{i+1}(扫描区域连续)
4 40 N100,000,M100,000N \le 100,000, M \le 100,000(无特殊限制)

样例

输入 (standard input)

4 3
1 4 2 3
-1 0 2

输出 (standard output)

2 1 1 3 3 4

样例说明(Note)

在第一个例子中,N=4,M=3N=4, M=3,优先级数组为 [1, 4, 2, 3](位置 1 到 4)。 扫描基准偏移量 Z={1,0,2}Z = \{-1, 0, 2\}

时间 tt 扫描位置 (Zj+tZ_j + t) 有效区块的优先级 最高优先级 对应位置
0 -1, 0, 2 优先级(2) = 4 4 2
1 0, 1, 3 优先级(1)=1, 优先级(3)=2 1
2 1, 2, 4 优先级(1)=1, 优先级(2)=4, 优先级(4)=3
3 2, 3, 5 优先级(2)=4, 优先级(3)=2 2 3
4 3, 4, 6 优先级(3)=2, 优先级(4)=3
5 4, 5, 7 优先级(4)=3 3 4

输出结果为:2 1 1 3 3 4