首页 > 代码库 > Splay模板 1.0
Splay模板 1.0
1 struct Splay{ 2 int rt,sz; ///根节点,树节点总数 3 int va[N],son[N][2],fa[N];///值,左右儿子,父亲 4 void spin(int t){ ///旋转操作 5 int x=fa[t], f=fa[x], y=son[x][1]==t; 6 son[x][y]=son[t][y^1], fa[son[x][y]]=x; 7 son[t][y^1]=x, fa[x]=t, fa[t]=f; 8 if(f) son[f][son[f][1]==x]=t; 9 }10 void play(int x){ /// splay操作11 for(int i;i=fa[x];spin(x))12 if(fa[i])13 spin((x==son[i][0])==(i==son[fa[i]][0])?i:x);14 rt=x;15 }16 void ins(int v){///插入元素17 int y,x=rt;18 while(1){19 y=son[x][va[x]<v];20 if(!y){21 y=++sz, va[y]=v, fa[y]=x;22 son[y][0]=son[y][1]=0;23 son[x][va[x]<v]=y;24 break;25 }26 x=y;27 }play(y);28 }29 int suc(){ ///找后继30 int x=rt,y=son[x][1];31 while(son[y][0])y=son[y][0];32 return va[y];33 }34 int pre(){ ///找前驱35 int x=rt,y=son[x][0];36 while(son[y][1])y=son[y][1];37 return va[y];38 }39 void init(int x){ ///初始化,需要初始值40 sz=rt=1;va[rt]=x;41 fa[1]=son[1][0]=son[1][1]=0;42 }43 }splay;
Splay模板 1.0
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。