替罪羊树模版 普通平衡树
替罪羊树,代码贼长,我哭了。。。 #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<vector> using namespace std; const int maxn = 1e5+5; const double alpha = 0.75; struct node{ int l,r,val; int size,fact; ///子树大小,实际大小 bool exist; }tzy[maxn]; int cnt,root; ///新建节点 void newnode(int &now,int val) { now=++cnt; tzy[now].val=val; tzy[now].size=tzy[now].fact=1; tzy[now].exist=true; } ///判断是否平衡 bool imbalance(int now) { ///左右子树的size中最大的一个的大小大于节点大小*平衡因子 ///被删掉的节点个数大于0.3 if(max(tzy[tzy[now].l].size,tzy[tzy[now].r].size)>tzy[now].size*alpha || tzy[now].size-tzy[now].fact>tzy[now].size*0