#P1442. Black Box

Black Box

描述

我们的“黑匣子”代表一个原始数据库。它可以保存一个整数数组,并且有一个特殊的变量ii。在初始时刻,黑匣子为空,且ii等于00。这个黑匣子处理一系列的命令(事务)。有两种类型的事务:

添加(ADD)(xx):将元素xx放入黑匣子中;

获取(GET):将ii增加11,并从黑匣子中包含的所有整数中给出第ii小的数。请记住,第ii小的数是在黑匣子中的元素按非降序排序后位于第ii个位置的数。

让我们研究一个可能的由1111个事务组成的序列:

示例1

序号 事务 ii 事务执行后黑匣子中的内容(元素按非降序排列) 答案
1 ADD(3) 0 3
2 GET 1 3
3 ADD(1) 1, 3
4 GET 2 3
5 ADD(-4) -4, 1, 3
6 ADD(2) -4, 1, 2, 3
7 ADD(8) -4, 1, 2, 3, 8
8 ADD(-1000) -1000, -4, 1, 2, 3, 8
9 GET 3 1
10 4 2
11 ADD(2) -1000, -4, 1, 2, 2, 3, 8

需要设计出一种高效的算法来处理给定的事务序列。“添加(ADD)”和“获取(GET)”事务的最大数量:每种类型各为3000030000个。

让我们用两个整数数组来描述事务序列:

  1. A(1),A(2),,A(M)A(1), A(2), \ldots, A(M):一系列正被放入黑匣子的元素。AA的值是绝对值不超过20000000002000000000的整数,M30000M \leq 30000。对于上述示例,我们有A=(3,1,4,2,8,1000,2)A = (3, 1, -4, 2, 8, -1000, 2)

  2. u(1),u(2),,u(N)u(1), u(2), \ldots, u(N):一个序列,它设定了在第11次、第22次、……以及第NN次“获取(GET)”事务时正被放入黑匣子的元素数量。对于上述示例,我们有u=(1,2,6,6)u = (1, 2, 6, 6)

黑匣子算法假定自然数序列u(1),u(2),,u(N)u(1), u(2), \ldots, u(N)按非降序排列,NMN \leq M,并且对于每个pp1pN1 \leq p \leq N),不等式pu(p)Mp \leq u(p) \leq M成立。这是因为对于我们的uu序列中的第pp个元素,我们执行一次“获取(GET)”事务,从我们的A(1),A(2),,A(u(p))A(1), A(2), \ldots, A(u(p))序列中给出第pp小的数。

输入 输入包含(按给定顺序):MMNNA(1)A(1)A(2)A(2),……,A(M)A(M)u(1)u(1)u(2)u(2),……,u(N)u(N)。所有数字由空格和(或)换行符分隔。

输出 根据给定的事务序列,将黑匣子的答案序列写入输出,每个数字占一行。

输入数据 1

7 4
3 1 -4 2 8 -1000 2
1 2 6 6

输出数据 1

3
3
1
2

来源

1996年东北欧竞赛