#P1442. Black Box
Black Box
描述
我们的“黑匣子”代表一个原始数据库。它可以保存一个整数数组,并且有一个特殊的变量。在初始时刻,黑匣子为空,且等于。这个黑匣子处理一系列的命令(事务)。有两种类型的事务:
添加(ADD)():将元素放入黑匣子中;
获取(GET):将增加,并从黑匣子中包含的所有整数中给出第小的数。请记住,第小的数是在黑匣子中的元素按非降序排序后位于第个位置的数。
让我们研究一个可能的由个事务组成的序列:
示例1
序号 | 事务 | 事务执行后黑匣子中的内容(元素按非降序排列) | 答案 | |
---|---|---|---|---|
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)”事务的最大数量:每种类型各为个。
让我们用两个整数数组来描述事务序列:
-
:一系列正被放入黑匣子的元素。的值是绝对值不超过的整数,。对于上述示例,我们有。
-
:一个序列,它设定了在第次、第次、……以及第次“获取(GET)”事务时正被放入黑匣子的元素数量。对于上述示例,我们有。
黑匣子算法假定自然数序列按非降序排列,,并且对于每个(),不等式成立。这是因为对于我们的序列中的第个元素,我们执行一次“获取(GET)”事务,从我们的序列中给出第小的数。
输入 输入包含(按给定顺序):,,,,……,,,,……,。所有数字由空格和(或)换行符分隔。
输出 根据给定的事务序列,将黑匣子的答案序列写入输出,每个数字占一行。
输入数据 1
7 4
3 1 -4 2 8 -1000 2
1 2 6 6
输出数据 1
3
3
1
2
来源
1996年东北欧竞赛