#pHSlydlt40x4601. 普通平衡树

普通平衡树

题目描述

您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:

  1. 插入数值 xx
  2. 删除数值 xx(若有多个相同的数,应只删除一个)。
  3. 查询数值 xx 的排名(若有多个相同的数,应输出最小的排名)。(保证查询时数值 xx 存在)
  4. 查询排名为 xx 的数值。(保证查询时排名为 xx 的数值存在)
  5. 求数值 xx 的前驱(前驱定义为小于 xx 的最大的数)。
  6. 求数值 xx 的后继(后继定义为大于 xx 的最小的数)。

注意:数据保证查询的结果一定存在。

输入格式

第一行为 nn,表示操作的个数。

接下来 nn 行每行有两个数 opt\text{opt}xxopt\text{opt} 表示操作的序号 (1opt6)(1 \le \text{opt} \le 6)

输出格式

对于操作 3,4,5,63,4,5,6 每行输出一个数,表示对应答案。

样例

输入样例:

8
1 10
1 20
1 30
3 20
4 2
2 10
5 25
6 -1

输出样例:

2
20
20
20

样例解释

初始集合为空。

  1. 插入 10 → 集合 {10}
  2. 插入 20 → 集合 {10,20}
  3. 插入 30 → 集合 {10,20,30}
  4. 查询 20 的排名:从小到大排序为 [10,20,30],20 的排名为 2
  5. 查询排名为 2 的数值:即 20
  6. 删除 10 → 集合 {20,30}
  7. 查询 25 的前驱:小于 25 的最大数是 20
  8. 查询 -1 的后继:大于 -1 的最小数是 20

数据范围

  • 1n1000001 \le n \le 100000
  • 所有数值均在 107-10^710710^7 内。

时空限制

  • 时间限制:1 秒
  • 空间限制:64 MB

所有题目整理完毕。