博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Splay】bzoj3224 Tyvj 1728 普通平衡树
阅读量:6335 次
发布时间:2019-06-22

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

#include
#include
#include
#include
using namespace std;#define maxn 1000000#define INF 2147483647int n,fa[maxn],val[maxn],c[maxn][2],root,tot,siz[maxn],cnt[maxn];void Maintain(int x){ siz[x]=siz[c[x][0]]+siz[c[x][1]]+cnt[x];}void NewNode(int &x,int Fa,int key){ x=++tot; fa[x]=Fa; c[x][0]=c[x][1]=0; val[x]=key; siz[x]=cnt[x]=1;}void Rotate(int x,bool flag){ int y=fa[x]; c[y][!flag]=c[x][flag]; fa[c[x][flag]]=y; if(fa[y]){ c[fa[y]][c[fa[y]][1]==y]=x; } fa[x]=fa[y]; c[x][flag]=y; fa[y]=x; Maintain(y); Maintain(x);}void Splay(int x,int goal){ if(!x){ return; } int y; while((y=fa[x])!=goal){ if(fa[y]==goal){ Rotate(x,c[y][0]==x); } else{ if((c[y][0]==x)==(c[fa[y]][0]==y)){ Rotate(y,c[fa[y]][0]==y); } else{ Rotate(x,c[y][0]==x); y=fa[x]; } Rotate(x,c[y][0]==x); } } Maintain(x); if(!goal){ root=x; }}int Find(int key,int x=root){ while(c[x][val[x]
key&&fa[x]){ x=fa[x]; } return val[x];}int GetNex(int key){ int x=Find(key); if(val[x]==key){ Splay(x,0); return val[Findmin(c[x][1])]; } while(val[x]

转载于:https://www.cnblogs.com/autsky-jadek/p/7182532.html

你可能感兴趣的文章
CentOS使用安装光盘建立本地软件源
查看>>
JavaScript 滑移效果
查看>>
[SEO]让你的Asp.Net网站自动生成Sitemap——XmlSitemap
查看>>
【java JVM】JVM中类的加载,加载class文件的原理机制
查看>>
Apache2.4为什么启动报错Cannot load php5apache2_4.dll into server
查看>>
在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储
查看>>
2.2. 运行 Spring boot 项目
查看>>
用 eric6 与 PyQt5 实现python的极速GUI编程(系列01)--Hello world!
查看>>
最小的镜像 - 每天5分钟玩转容器技术(9)
查看>>
[Everyday Mathematics]20150302
查看>>
写给立志做程序员(码农)的大学生
查看>>
Shiro的使用详解(干货)
查看>>
push_back模式工作
查看>>
芯片巨人英特尔的 Linux 开源驱动加入支持其独显的代码
查看>>
北京云栖大会 Tech Insight 金融级分布式架构分享一览
查看>>
游标+bulk collect into limit的不同方法查询数据
查看>>
spring中bean配置和bean注入
查看>>
CentOS 7更改yum源与更新系统
查看>>
SAP-SD-销售模式-寄售
查看>>
写在2016年底(r11笔记第30天)
查看>>