#4360. 查询多重集合(Querying Multiset)

查询多重集合(Querying Multiset)

题目描述

小高有许多球和一个袋子。最初,袋子是空的。小高将进行 QQ 次操作,每次操作是以下三种类型之一。

  1. 在一个空白球上写上整数 XiX_i 并将其放入袋中。

  2. 对于袋中的每个球,将其上写的整数替换为该整数加上 XiX_i

  3. 从袋中取出写有最小整数的球(如果有多个这样的球,取出其中一个)。记录这个球上的整数并将其丢弃。

对于每个类型为 3 的操作,请按顺序输出记录的整数。

输入格式

输入格式如下:

QQ

query1query_1

query2query_2

\vdots

queryQquery_Q

每个 queryiquery_i 的格式如下三者之一:

  • 11 XiX_i

  • 22 XiX_i

  • 33

第一个数字是 1Pi31 \leq P_i \leq 3,表示操作类型。如果 Pi=1P_i=1Pi=2P_i=2,后面会跟一个空格和 XiX_i

输出格式

对于每个 Pi=3P_i=3 的操作,在单独的一行中输出记录的整数。

样例

5
1 3
1 5
3
2 2
3
3
7
6
1 1000000000
2 1000000000
2 1000000000
2 1000000000
2 1000000000
3
5000000000

样例解释

【样例说明1】

小高将进行以下操作:

  1. 在一个球上写3并放入袋中。

  2. 在一个球上写5并放入袋中。

  3. 袋中现在有一个写着3的球和一个写着5的球。取出较小的那个,即3。记录3并丢弃。

  4. 袋中现在只有一个写着5的球。将这个整数替换为5+2=7。

  5. 袋中现在只有一个写着7的球。取出这个球,记录7,并丢弃。

因此,我们应该按顺序输出3和7。

【样例说明2】

注意输出可能不适合32位整数。

数据范围

  • 1Q2×1051 \leq Q \leq 2\times 10^5
  • 1Pi31 \leq P_i \leq 3
  • 1Xi1091 \leq X_i \leq 10^9
  • 所有输入都是整数。
  • 至少有一个 ii 满足 Pi=3P_i=3
  • 如果 Pi=3P_i=3,那么在第 ii 次操作之前袋中至少有一个球。

来源

  • AtCoder ABC212D