#include<stdio.h>
#include<string.h>
using namespace std;
#define mm 111111
#define mn 33333
int L[mm],R[mm],S[mm],V[mm];
bool p[mm]={0};
int i,x,y,n,a,tt,root,ans;
void RR(int &t)//右旋左节点存在的情况下
{
int k=L[t];
L[t]=R[k];
R[k]=t;
S[k]=S[t];
S[t]=S[L[t]]+S[R[t]]+1;
t=k;
}
void LR(int &t)//左旋
{
int k=R[t];
R[t]=L[k];
L[k]=t;
S[k]=S[t];
S[t]=S[L[t]]+S[L[t]]+1;
t=k;
}
void maintain(int &t,bool flag)//维护sbt树 保证sbt树的性质
{
if(flag)
if(S[R[R[t]]]>S[L[t]])
LR(t);
else
if(S[L[R[t]]]>S[L[t]])
RR(R[t]),LR(t);
else return;
else
if(S[L[L[t]]]>S[R[t]])
RR(t);
else if(S[R[L[t]]]>S[R[t]])
{LR(L[t]);RR(t);}
else
return;
maintain(L[t],0);
maintain(R[t],1);
maintain(t,0);
maintain(t,1);
}
void i
SBT模板
最新推荐文章于 2016-08-16 07:19:27 发布
本文介绍了SBT树(Splay Tree)的相关操作,包括右旋、左旋、维护SBT树性质的函数,以及插入、查找、删除节点的方法。通过这些操作,可以高效地进行数据的增删查改。
摘要由CSDN通过智能技术生成