Splay
Splay
net/le_ballon_rouge/article/details/49741985
���Ӷ�֤��
#include<bits/stdc++.h>
using namespace std;
struct node
{
node *l,*r,*fa;
int key,tp;
node()
{
l=NULL;
r=NULL;
}
}*root;
void zig(node *p,node *fa,int t)
{
if(t==0) p->fa=fa->fa;
else p->fa=p;
p->tp=fa->tp;
fa->l=p->r,fa->fa=p,fa->tp=1;
if(fa->l!=NULL) fa->l->fa=fa,fa->l->tp=0;
p->r=fa;
}
void zag(node *p,node *fa,int t)
{
if(t==0) p->fa=fa->fa;
else p->fa=p;
p->fa=fa->fa,p->tp=fa->tp;
fa->r=p->l,fa->fa=p,fa->tp=0;
if(fa->r!=NULL) fa->r->fa=fa,fa->r->tp=1;
p->l=fa;
}
void zig_zig(node *p,node *fa,node *faa)
{
zig(fa,faa,0);
zig(p,fa,0);
}
void zag_zag(node *p,node *fa,node *faa)
{
zag(fa,faa,0);
zag(p,fa,0);
}
void zig_zag(node *p,node *fa,node *faa)
{
zig(p,fa,0);
zag(p,faa,0);
}
void zag_zig(node *p,node *fa,node *faa)
{
zag(p,fa,0);
zig(p,faa,0);
}
void _splay(node *p)
{
while(1){
if(p->tp==2) break ;
if(p->fa->tp==2){
if(p->tp==0) zig(p,p->fa,1);
else zag(p,p->fa,1);
//p=p->fa;
}
else{
if(p->tp==0&&p->fa->tp==0) zig_zig(p,p->fa,p->fa->fa);
else if(p->tp==1&&p->fa->tp==1) zag_zag(p,p->fa,p->fa->fa);
else if(p->tp==0&&p->fa->tp==1) zig_zag(p,p->fa,p->fa->fa);
else zag_zig(p,p->fa,p->fa->fa);
//p=p->fa->fa;
}
}
root=p;
}
void _insert(node *rt,int k)
{
node *p=rt;
while(1){
if(k<p->key){
if(p->l==NULL){
p->l=new node();
p->l->fa=p;
p=p->l;
p->key=k,p->tp=0;
_splay(p);
return ;
}
else{
p=p->l;
}
}
else{
if(p->r==NULL){
p->r=new node();
p->r->fa=p;
p=p->r;
p->key=k,p->tp=1;
_splay(p);
return ;
}
else{
p=p->r;
}
}
}
}
bool _find(node *rt,int k)
{
node *p=rt;
while(1){
if(p==NULL) return 0;
if(p->key==k){
_splay(p);
return 1;
}
if(p->key>k) p=p->l;
else p=p->r;
}
}
int main()
{
int n,x;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
if(i==0){
root=new node();
root->key=x,root->tp=2,root->fa=root;
}
else _insert(root,x);
}
while(~scanf("%d",&x)){
printf("%d\n",_find(root,x));
}
return 0;
}
#include<bits/stdc++.h>
int main()
{
int t;
root=NULL;
while(~scanf("%d",&t)){
_insert(t);
}
while(~scanf("%d",&t)){
printf("%d\n",_find(t)->key);
}
return 0;
}
https://wenku.baidu.com/view/7857b870aaea998fcc220ed8.html
#include<bits/stdc++.h>