#1222. 模拟堆

模拟堆

问题描述

给定一个数列,初始为空,请支持下面三种操作:

  1. 给定一个整数 xx,请将 xx 加入到数列中。
  2. 输出数列中最小的数。
  3. 删除数列中最小的数(如果有多个数最小,只删除 11 个)。

输入格式

第一行输入一个整数 nn,表示操作的次数。

接下来输入 nn 行,每行表示一次操作。每行首先包含一个整数 opop,表示操作类型:

  • op=1op = 1,则后跟一个整数 xx,表示将 xx 加入数列;
  • op=2op = 2,表示输出数列中的最小数;
  • op=3op = 3,表示删除数列中的最小数(若有多个数最小,只删除 11 个)。

输出格式

对于每个操作 22,输出一行一个整数表示答案。

样例输入 1

5
1 2
1 5
2
3
2

样例输出 1

2
5

说明

样例 1 解释:

  • 操作 11:加入 22,数列为 [2][2]
  • 操作 22:加入 55,数列为 [2,5][2, 5]
  • 操作 33:查询最小值,当前最小值为 22,输出 2
  • 操作 44:删除最小值 22,数列变为 [5][5]
  • 操作 55:查询最小值,当前最小值为 55,输出 5

评测数据规模

对于所有评测数据:

  • 对于 30%30\% 的数据,保证 n15n \leq 15
  • 对于 70%70\% 的数据,保证 n104n \leq 10^4
  • 对于 100%100\% 的数据,保证 1n1061 \leq n \leq 10^61x<2311 \leq x < 2^{31}op{1,2,3}op \in \{1, 2, 3\}