#P1075. 简单平衡树

简单平衡树

简单平衡树

题目描述

平衡树是一种高级数据结构,他可以在不超过 log2nlog_2n 的复杂度内完成序列的 增删改查

Orange最近迷上了树学与应用树学,他钟爱平衡树这种数据结构,因此他想请你帮他完成一颗平衡树,维护一个从小到大有序序列,支持下列操作:

  1. 增加一个数 xx
  2. 删除一个数 xx。(如果序列中存在多个 xx,则只删除一个,如果不存在 xx,则忽略该操作)
  3. 查询一个数 xx 在序列中的数量。
  4. 查询一个数 xx 的前驱。(即序列中小于 xx 的最大值;如果不存在请输出-1
  5. 查询一个数 xx 的后继。(即序列中大于 xx 的最小值;如果不存在请输出-1
  6. 输出当前序列;如果序列为空则输出-1

输入格式

输入第一行包含一个整数 n(n2×105)n(n \leq 2 \times 10^5),表示操作的指令数。

接下来 nn 行,每行包括一条指令:

op (x)

opop 为上述题意,如果 opop 为1-5;则后面还会跟一个整数 x(x109)x(x \leq 10^9)

题目保证指令6不会超过100条。同时对于操作3-5;不保证 xx 一定存在于序列当中。

输出格式

对于每个查询,输出答案。

样例 #1

样例输入 #1

10
1 1
1 2
1 5
3 1
1 1
3 1
2 1
4 5
5 5
6

样例输出 #1

1
2
2
-1
1 2 5

提示

在执行完成1-3条指令后面,序列为 1 2 51 \ 2 \ 5

此时执行第4条指令,查询 11 的个数,答案为 11

然后执行第5和6条指令,查询 11 的个数,答案为 22

执行第7条指令,删除一个 11,此时序列为 1251 2 5

执行第8条指令,查询 55 的前驱,答案为 22

执行第9条指令,查询 55 的后继,由于 55 不存在后继,因此答案为 1-1

执行第10条指令,输出当前序列,为1 2 51\ 2\ 5