概念: 平衡树是二叉搜索树和堆合并构成的数据结构,它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
性质:对于每一个节点,满足它大于左儿子里的每一个节点,小于右儿子的每一个节点,即树的中序遍历为有序序列
对于一个平衡树,它可以支持的操作有
1:插入一个值
2:删除一个值
3:查询一个 x x x 的排名
4:查询排名为 x x x 的值
5:查询严格小于 x x x 的最大值
6:查询严格大于 x x x 的最小值
时间复杂度:不论哪一种操作,所花的时间都和树的高度成正比。因此,如果共有n个元素,
那么平均每次操作需要 O ( l o g n ) O(logn) O(logn) 的时间,所以我们要尽量让这棵树随机.
那么对于每一个节点,我们可以这样定义
struct tr
{
int l, r;
int siz, cnt, val, key;
} tree[N];
l , r l,r l,r 为树的左右儿子的编号, s i z siz siz 为这棵子树的节点个数, v a l val val 为一个随机值, k e y key key 是维护的值, c n t cnt cnt 为当前值的个数
通过 v a l , k e y val,key val,key<