Splay指针模板
Posted 古时候的瘾君子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Splay指针模板相关的知识,希望对你有一定的参考价值。
#include<cstdio> #include<queue> #include<cstdlib> #define il inline struct node { int v; node* fa,ch[2]; }s[100045],*pos,*rt; il void newnode(node* &r,int v,node* fa) { if(mem.empty()) r=pos++; else r=mem.front(),mem.pop(); r->v=v; r->fa=fa; r->ch[0]=r->ch[1]=0; } il void roll(node* &r,boot t) { node* y=r->fa; if(y->fa) y->fa->ch[y->fa->ch[1]==y]=x; fa[x]=y->fa; if(x->ch[t]) x->ch[t]->fa=y; y->ch[!t]=x->ch[t]; x->ch[p]=y; y->fa=x; } il void splay(node* r,node* g)//将r旋转到g下面 { while(r->fa!=g) { if(r->fa->fa==g)//如果r的爸爸的爸爸就是目标 roll(r,r->fa->ch[0]==x->fa);//转一下就可以了 else {//自行理解,很简单 node* y=x->fa; bool t=y->fa->ch[0]==y; if(y->ch[0]==x) roll(y,t); else roll(x,!t); roll(x,t); } } if(!g)//目标没了,r当大爷 rt=r; } using namespace std; int main() { }
以上是关于Splay指针模板的主要内容,如果未能解决你的问题,请参考以下文章
[模板]洛谷T3369 普通平衡树 链表&递归版无父指针版Splay
史上最详尽的平衡树(splay)讲解与模板(非指针版spaly)