平衡树是一个很神奇的数据结构
noip前,学了其两种实现方式,Splay和Treap,非常实用(虽然码量有点。。)
每个平衡树都是二叉查找树,保证\(左孩子 \leq 自己 \leq 右孩子\)
因此,平衡树的中序遍历就是插入节点的有序序列(理解一下)
平衡树支持插入,删除,以及各种查询,以下面为例
\(\color{#0066ff}{题目描述}\)
您需要写一种数据结构,来维护一些数,其中需要提供以下操作:
插入数x
删除x数x(若有多个相同的数,只删除一个)
查询数x的排名(排名定义为比当前数小的数的个数+1。若有多个相同的数,输出最小的排名)
查询排名为x的数
求x的前驱(前驱定义为小于x,且最大的数)
求x的后继(后继定义为大于x,且最小的数)
\(\color{#0066ff}{输入格式}\)
第一行为n,表示操作的个数,下面nn行每行有两个数opt和x,opt表示操作的序号\(1\leq opt \leq 6\)
\(\color{#0066ff}{输出格式}\)
对于操作3,4,5,6每行输出一个数,表示对应答案
\(\color{#0066ff}{输入样例}\)
10
1 106465
4 1
1 317721
1 460929
1 644985
1 84185
1 89851
6 81968
1 492737
5 493598
\(\color{#0066ff}{输出样例}\)
106465
84185
492737