以随机数维护平衡,使树高期望为logn级别
不依靠旋转,只有两个核心操作merge(合并)和split(拆分)
因此可持久化
先介绍变量
1 const int N=100005; 2 int n; 3 struct Node { 4 int val,key,siz; //权值,随机权值,子树大小 5 int son[2]; //左右儿子(0左1右) 6 void res() { //清空该节点(用于删除) 7 son[0]=son[1]=siz=val=key=0; 8 } 9 } tree[N]; 10 int ins; 11 int mem[N],inm; //内存回收池 12 int root;