BZOJ:4825: [Hnoi2017]单旋
Description

Input
Output
Sample Input
1 2
1 1
1 3
4
5
Sample Output
2
2
2
2
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 210010
using namespace std; int p,ca,f;
inline int read(){
p=;ca=getchar();f=;
while(ca<''||ca>'') {if (ca=='-') f=-;ca=getchar();}
while(ca>=''&&ca<='') p=p*+ca-,ca=getchar();
return p*f;
}
struct tree{int l,r,ra,k,t;}T[MN];
struct na{int y,ne,c,nu;}b[MN*];
int fa[MN],n,m,t,x,y,c,num,id[MN],key[MN],ch[MN][],ma[MN],st[MN],si[MN],NUM=,T_ro=,cnt=,size=,hav[MN][],Fa[MN];
bool rt[MN],rev[MN];
inline int max(int a,int b){return a>b?a:b;}
inline void lef(int &p){
int k=T[p].l;
T[p].l=T[k].r;
T[k].r=p;
p=k;
}
inline void rig(int &p){
int k=T[p].r;
T[p].r=T[k].l;
T[k].l=p;
p=k;
}
int T_askmax(int p,int k){
if (!p) return ;
int u;
if (k<T[p].k) return (u=T_askmax(T[p].l,k))?u:T[p].t;else return T_askmax(T[p].r,k);
}
int T_askmin(int p,int k){
if (!p) return ;
int u;
if (k>T[p].k) return (u=T_askmin(T[p].r,k))?u:T[p].t;else return T_askmin(T[p].l,k);
}
void T_DEL(int &p){
if (!T[p].l&&!T[p].r) p=;else
if (!T[p].r) lef(p),T_DEL(T[p].r);else
if (!T[p].l) rig(p),T_DEL(T[p].l);else
if (T[T[p].l].ra<T[T[p].r].ra) lef(p),T_DEL(T[p].r);else rig(p),T_DEL(T[p].l);
}
void T_del(int &p,int k){if (T[p].k==k) T_DEL(p);else if (k<T[p].k) T_del(T[p].l,k);else T_del(T[p].r,k);}
void T_in(int &p,int k,int v){
if (!p){
p=++num;
T[p].k=k;T[p].t=v;T[p].l=T[p].r=;T[p].ra=rand();
return;
}
if (T[p].k>k){
T_in(T[p].l,k,v);
if (T[T[p].l].ra<T[p].ra) lef(p);
}else{
T_in(T[p].r,k,v);
if (T[T[p].r].ra<T[p].ra) rig(p);
}
}
int T_min(int p){return T[p].l?T_min(T[p].l):p;}
int T_max(int p){return T[p].r?T_max(T[p].r):p;}
inline void up(int x){si[x]=si[ch[x][]]+si[ch[x][]]+;}
inline void pd(int x){if (rev[x]) swap(ch[x][],ch[x][]),rev[ch[x][]]^=,rev[ch[x][]]^=,rev[x]=;}
inline void rot(int x){
int y=fa[x],kind=ch[y][]==x;
fa[x]=fa[y];
fa[y]=x;
ch[y][kind]=ch[x][!kind];
fa[ch[y][kind]]=y;
ch[x][!kind]=y;
if(rt[y]) rt[y]=,rt[x]=;else ch[fa[x]][ch[fa[x]][]==y]=x;
up(y);up(x);
}
inline void splay(int x){
int i=x,to=;
while (!rt[i]) st[++to]=i,i=fa[i];pd(i);
for (;to;to--) pd(st[to]);
while(!rt[x]){
if (rt[fa[x]]) rot(x);else
if ((ch[fa[fa[x]]][]==fa[x])==(ch[fa[x]][]==x)) rot(fa[x]),rot(x);else rot(x),rot(x);
}
}
inline void acc(int u){
int x=;
while(u){
splay(u);
rt[ch[u][]]=;rt[ch[u][]=x]=;si[u]+=si[x];
up(u);
u=fa[x=u];
}
}
inline void root(int x){acc(x);splay(x);rev[x]^=;}
inline void link(int x,int y){
acc(x);splay(x);fa[y]=x;
printf("%d\n",si[x]+);
}
int find(int x){return ch[x][]?find(ch[x][]):x;}
char ss[];
int main(){
m=read();
while (m--){
t=read();
if (t==){
t=read();rt[++cnt]=;si[cnt]=;size++;
if (size==){
T_in(T_ro,t,cnt);
fa[cnt]=;Fa[cnt]=;
puts("");
}else{
if (x=T_askmin(T_ro,t),!hav[x][]&&x) hav[x][]=cnt,link(x,cnt),Fa[cnt]=x;else
if (x=T_askmax(T_ro,t),!hav[x][]&&x) hav[x][]=cnt,link(x,cnt),Fa[cnt]=x;
T_in(T_ro,t,cnt);
}
}else if (t==){
t=T[T_min(T_ro)].t;
if (Fa[t]==){
puts("");
continue;
}
acc(t);acc(Fa[t]);splay(Fa[t]);printf("%d\n",si[Fa[t]]+);x=find(Fa[t]);
if (hav[t][]) splay(hav[t][]),fa[hav[t][]]=fa[t],Fa[hav[t][]]=Fa[t];hav[Fa[t]][]=hav[t][];
splay(x);fa[x]=Fa[x]=t;hav[t][]=x;fa[t]=Fa[t]=;
}else if (t==){
size--;
t=T_min(T_ro);T_del(T_ro,T[t].k);t=T[t].t;
if (Fa[t]==){
puts("");
acc(hav[t][]);acc(t);Fa[hav[t][]]=fa[hav[t][]]=;
continue;
}
acc(t);acc(Fa[t]);splay(Fa[t]);printf("%d\n",si[Fa[t]]+);
if (hav[t][]) splay(hav[t][]),fa[hav[t][]]=fa[t],Fa[hav[t][]]=Fa[t];hav[Fa[t]][]=hav[t][];
}else if (t==){
t=T[T_max(T_ro)].t;
if (Fa[t]==){
puts("");
continue;
}
acc(t);acc(Fa[t]);splay(Fa[t]);printf("%d\n",si[Fa[t]]+);x=find(Fa[t]);
if (hav[t][]) splay(hav[t][]),fa[hav[t][]]=fa[t],Fa[hav[t][]]=Fa[t];hav[Fa[t]][]=hav[t][];
splay(x);fa[x]=Fa[x]=t;hav[t][]=x;fa[t]=Fa[t]=;
}else if (t==){
size--;
t=T_max(T_ro);T_del(T_ro,T[t].k);t=T[t].t;
if (Fa[t]==){
puts("");
acc(hav[t][]);acc(t);Fa[hav[t][]]=fa[hav[t][]]=;
continue;
}
acc(t);acc(Fa[t]);splay(Fa[t]);printf("%d\n",si[Fa[t]]+);
if (hav[t][]) splay(hav[t][]),fa[hav[t][]]=fa[t],Fa[hav[t][]]=Fa[t];hav[Fa[t]][]=hav[t][];
}
}
}
BZOJ:4825: [Hnoi2017]单旋的更多相关文章
- bzoj 4825: [Hnoi2017]单旋 [lct]
4825: [Hnoi2017]单旋 题意:有趣的spaly hnoi2017刚出来我就去做,当时这题作死用了ett,调了5节课没做出来然后发现好像直接用lct就行了然后弃掉了... md用lct不知 ...
- 【刷题】BZOJ 4825 [Hnoi2017]单旋
Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的必 ...
- bzoj 4825: [Hnoi2017]单旋【dfs序+线段树+hash】
这个代码已经不是写丑那么简单了--脑子浆糊感觉np++分分钟想暴起打死我--就这还一遍A过了-- 先都读进来hash一下,因为是平衡树所以dfs序直接按照点值来就好 对于每个操作: 1:set维护已插 ...
- 4825: [Hnoi2017]单旋
4825: [Hnoi2017]单旋 链接 分析: 以后采取更保险的方式写代码!!!81行本来以为不特判也可以,然后就总是比答案大1,甚至出现负数,调啊调啊调啊调~~~ 只会旋转最大值和最小值,以最小 ...
- bzoj P4825 [Hnoi2017]单旋——solution
Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据 结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的 ...
- [BZOJ4825][HNOI2017]单旋(线段树+Splay)
4825: [Hnoi2017]单旋 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 667 Solved: 342[Submit][Status][ ...
- 【LG3721】[HNOI2017]单旋
[LG3721][HNOI2017]单旋 题面 洛谷 题解 20pts 直接模拟\(spaly\)的过程即可. 100pts 可以发现单旋最大.最小值到根,手玩是有显然规律的,发现只需要几次\(lin ...
- 【BZOJ4825】[Hnoi2017]单旋 线段树+set
[BZOJ4825][Hnoi2017]单旋 Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能 ...
- bzoj4825 [Hnoi2017]单旋
Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的必 ...
随机推荐
- 代码生成利器:IDEA 强大的 Live Templates(转)
代码生成利器:IDEA 强大的 Live Templates - 文章 - 伯乐在线http://blog.jobbole.com/110607/ 前言 Java 开发过程经常需要编写有固定格式的代码 ...
- Noip2016换教室(期望+DP)
Description 题目链接:Luogu Solution 这题结合了DP和概率与期望,其实只要稍微知道什么是期望就可以了, 状态的构造很关键,\(F[i][j][0/1]\)表示已经到第\(i\ ...
- bzoj 1566: [NOI2009]管道取珠
Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. ...
- css弹性盒子新旧兼容
前言:本篇随笔是对弹性盒子有了解的人来写的这篇文章,具体属性产生的效果这里不做说明,基础的东西去查文档.这里只是总结. 时至今日,css3的flex弹性盒子在移动端基本上都是支持的,但不排除有些些低版 ...
- sort 命令详解
sort 作用:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序 参数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字 ...
- Centos7解决图形界面卡死问题
经常会遇到图形界面卡死,搜了一搜,解决办法如下: killall -9 gnome-shell
- linux下后台运行MATLAB
原帖:http://sypeterli1.blog.163.com/blog/static/2283740492013101745824207/ 后台运行matlab脚本文件的方法:nohup ...
- MySQL 单实例编译安装 以及多实例安装简介
这是基本的安装教程,与牛逼的大神无关,或许是牛逼大神不用看就会安装吧. CentOS 6.5 Final x86_64 一.预安装软件包 1.开发包组合安装 yum groupinstall &qu ...
- leetcode — linked-list-cycle-ii
/** * Source : https://oj.leetcode.com/problems/linked-list-cycle-ii/ * * Given a linked list, retur ...
- SQL2005 到 SQL2008R2 发布订阅----发布'xxxxx'的初始快照尚不可用。
步骤略! SQL2005 到 SQL2008R2 发布订阅----发布'xxxxx'的初始快照尚不可用. 发布库快照已经创建完成为什么到订阅就快照不可用呢! 订阅通过日志读取代理解析! 查了下代理安全 ...