标签:pop using new lin nod == class log amp
#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() { }
标签:pop using new lin nod == class log amp
原文地址:http://www.cnblogs.com/gshdyjz/p/7207678.html