博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2828 伸展树模拟
阅读量:5132 次
发布时间:2019-06-13

本文共 1858 字,大约阅读时间需要 6 分钟。

用伸展树模拟插队比线段树快乐3倍。。

但是pojT了。别的oj可以过,直接贴代码.

每次更新时,找到第pos个人,splay到根,然后作为新root的左子树即可

#include
#include
#include
#include
#define maxn 200005using namespace std;int pre[maxn],ch[maxn][2],num[maxn],key[maxn],size[maxn],tot,root;void init(){ tot=root=0; pre[root]=ch[root][1]=ch[root][0]=num[root]=key[root]=size[root]=0;}void newnode(int &r,int fa,int k,int val){ r=++tot; ch[r][0]=ch[r][1]=0; num[r]=val; key[r]=k; pre[r]=fa; size[root]=1;}void pushup(int r){ size[r]=size[ch[r][0]]+size[ch[r][1]]+1;}void rotate(int x,int kind){ int fa=pre[x]; ch[fa][!kind]=ch[x][kind]; pre[ch[x][kind]]=fa; if(pre[fa]) ch[pre[fa]][ch[pre[fa]][1]==fa]=x; pre[x]=pre[fa]; pre[fa]=x; ch[x][kind]=fa; pushup(x);pushup(fa);}void splay(int r,int goal){ while(pre[r]!=goal){ if(pre[pre[r]]==goal) rotate(r,ch[pre[r]][0]==r); else { int fa=pre[r]; int kind=ch[pre[fa]][0]==fa;//???????? if(ch[fa][kind]==r){ rotate(r,!kind); rotate(r,kind); } else { rotate(fa,kind); rotate(r,kind); } } } if(goal==0) root=r; pushup(r);pushup(root);}void Treavel(int x){ if(x) { Treavel(ch[x][0]); printf("结点%2d:左儿子 %2d 右儿子 %2d 父结点 %2d size=%2d,key=%2d \n",x,ch[x][0],ch[x][1],pre[x],size[x],key[x]); Treavel(ch[x][1]); }}void debug(){ printf("root:%d\n",root); Treavel(root);}void Treval(int r){ if(r){ if(ch[r][0]) Treval(ch[r][0]); printf("%d ",num[r]); if(ch[r][1]) Treval(ch[r][1]); }}void getth(int pos){ int r=root; while(size[ch[r][0]]+1!=pos){ if(size[ch[r][0]]+1

 

转载于:https://www.cnblogs.com/zsben991126/p/9994309.html

你可能感兴趣的文章
DataGridView的行的字体颜色变化
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
【题解】青蛙的约会
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
Red and Black(poj-1979)
查看>>
安装 Express
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>