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指针模板的主要内容,如果未能解决你的问题,请参考以下文章

Splay指针模板

[模板]洛谷T3369 普通平衡树 链表&递归版无父指针版Splay

在洛谷3369 Treap模板题 中发现的Splay详解

史上最详尽的平衡树(splay)讲解与模板(非指针版spaly)

[模板]洛谷T2042 NOI2005 维护数列 Splay

[知识点]Splay tree指针实现