bzo j4825 [Hnoi2017]单旋
Description
Input
Output
#include<cstdio>
#include<set>
const int N=1e5+;
namespace lct{
#define lc ch][0
#define rc ch][1
#define fa ch][2
#define sz ch][3
int ch[N][];
bool nrt(int x){
return x==x[fa][lc]||x==x[fa][rc];
}
void up(int x){
x[sz]=+x[lc][sz]+x[rc][sz];
}
void rot(int x){
int f=x[fa],g=f[fa],d=x==f[rc];
if(nrt(f))g[ch][g[rc]==f]=x;
x[fa]=g;
(f[ch][d]=x[ch][d^])[fa]=f;
(x[ch][d^]=f)[fa]=x;
up(f);up(x);
}
void sp(int x){
while(nrt(x)){
int f=x[fa];
if(nrt(f))rot((x==f[lc])==(f==f[fa][lc])?f:x);
rot(x);
}
}
void acs(int x){
for(int y=;x;sp(x),x[rc]=y,up(x),y=x,x=x[fa]);
}
void ct(int x){
acs(x);sp(x);
x[lc][fa]=;
x[lc]=;
up(x);
}
void lk(int x,int y){
sp(x);
x[fa]=y;
}
void query(int x){
acs(x);
sp(x);
printf("%d\n",x[lc][sz]+);
}
#undef lc
#undef rc
#undef fa
#undef sz
}
#define G *++ptr
char buf[N*],*ptr=buf-;
int q,o,x,rt=,ch[N][],fa[N],p=;
int _(){
int x=,c=G;
while(c<)c=G;
while(c>)x=x*+c-,c=G;
return x;
}
struct pos{
int x,y;
bool operator<(pos w)const{return x<w.x;}
};
std::set<pos>st;
void setc(int w,int d,int u){
fa[ch[w][d]=u]=w;
lct::lk(u,w);
}
void setc(int w,int d){
int u=ch[w][d];
fa[u]=ch[w][d]=;
lct::ct(u);
}
void ins(int x){
int u=++p;
lct::ch[u][]=;
if(!rt){
rt=u;
}else{
std::set<pos>::iterator it=st.upper_bound((pos){x,});
if(it==st.end()||ch[it->y][]){
--it;
setc(it->y,,u);
}else{
setc(it->y,,u);
}
}
lct::query(u);
st.insert((pos){x,u});
}
int main(){
fread(buf,,sizeof(buf),stdin)[buf]=;
for(q=_();q;--q){
o=_();
if(o==){
x=_();
ins(x);
}else if(o==||o==){
int w=st.begin()->y,c=ch[w][],f=fa[w];
lct::query(w);
if(f){
setc(f,);
if(c)setc(w,),setc(f,,c);
if(o==)setc(w,,rt),rt=w;
}else if(o==){
if(c)setc(w,),rt=c;
}
if(o==)st.erase(st.begin());
}else if(o==||o==){
int w=(--st.end())->y,c=ch[w][],f=fa[w];
lct::query(w);
if(f){
setc(f,);
if(c)setc(w,),setc(f,,c);
if(o==)setc(w,,rt),rt=w;
}else if(o==){
if(c)setc(w,),rt=c;
}
if(o==)st.erase(--st.end());
}
if(st.empty())rt=;
}
return ;
}
bzo j4825 [Hnoi2017]单旋的更多相关文章
- bzoj 4825: [Hnoi2017]单旋 [lct]
4825: [Hnoi2017]单旋 题意:有趣的spaly hnoi2017刚出来我就去做,当时这题作死用了ett,调了5节课没做出来然后发现好像直接用lct就行了然后弃掉了... md用lct不知 ...
- 【LG3721】[HNOI2017]单旋
[LG3721][HNOI2017]单旋 题面 洛谷 题解 20pts 直接模拟\(spaly\)的过程即可. 100pts 可以发现单旋最大.最小值到根,手玩是有显然规律的,发现只需要几次\(lin ...
- 4825: [Hnoi2017]单旋
4825: [Hnoi2017]单旋 链接 分析: 以后采取更保险的方式写代码!!!81行本来以为不特判也可以,然后就总是比答案大1,甚至出现负数,调啊调啊调啊调~~~ 只会旋转最大值和最小值,以最小 ...
- [BZOJ4825][HNOI2017]单旋(线段树+Splay)
4825: [Hnoi2017]单旋 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 667 Solved: 342[Submit][Status][ ...
- 【BZOJ4825】[Hnoi2017]单旋 线段树+set
[BZOJ4825][Hnoi2017]单旋 Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能 ...
- bzoj4825 [Hnoi2017]单旋
Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的必 ...
- BZOJ:4825: [Hnoi2017]单旋
Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的必 ...
- HNOI2017 单旋
题目描述 网址:https://www.luogu.org/problemnew/show/3721 大意: 有一颗单旋Splay(Spaly),以key值为优先度,总共有5个操作. [1] 插入一个 ...
- HNOI2017单旋
单旋 这道题做法贼多,LCT,splay,线段树什么的貌似都行. 像我这种渣渣只会线段树了(高级数据结构学了也不会用). 首先离线所有操作,因为不会有两个点值重复,所以直接离散. 一颗线段树来维护所有 ...
随机推荐
- POJ 3259 Wormholes(最短路&spfa正权回路)题解
题意:给你m条路花费时间(双向正权路径),w个虫洞返回时间(单向负权路径),问你他能不能走一圈回到原点之后,时间倒流. 思路:题意有点难看懂,我们建完边之后找一下是否存在负权回路,存在则能,反之不能. ...
- [数据库] - org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection
MySQL的驱动改名了,如果使用原来的com.mysql.jdbc.Driver 那么会提醒驱动不正常了,那么新的MySQL驱动名为:com.mysql.cj.jdbc.Driver 之后还报错,如题 ...
- IDEA 搭建授权服务器
引用地址 http://blog.lanyus.com/archives/317.html 今天突出发现基本公开的激活地址都被屏蔽了(IDEA 2017.3 版本) 记录一下 docker pull ...
- node 常用指令 node 扩展链接
node -v node 版本 npm -v npm版本号,npm是在安装nodejs时一同安装的nodejs包管理器 (注册.安装模块,和小乌龟有点像) npm list 当 ...
- android 蓝牙通信编程讲解
以下是开发中的几个关键步骤: 1,首先开启蓝牙 2,搜索可用设备 3,创建蓝牙socket,获取输入输出流 4,读取和写入数据 5,断开连接关闭蓝牙 下面是一个demo 效果图: SearchDevi ...
- android平台蓝牙编程
Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输. 本文档描述了怎样利用android平台提供的蓝牙API去实现蓝牙设备之间的通信,蓝牙设备之间的通信主要包括了四个步骤:设置蓝牙设 ...
- 【Python】实现对大文件的增量读取
背景 前段时间在做一个算法测试,需要对源于日志的数据进行分析才能获取到结果:日志文件较大,所以想要获取数据的变化曲线,增量读取是最好的方式. 网上有很多人的技术博客都是写的用for循环readline ...
- SQL Server 查询优化 索引的结构与分类
一.索引的结构 关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有数据页在磁盘上是如何组织的呢?分两种情 ...
- [sql]java.sql.Types的具体对应值(jdbcType)
public final static int BIT = -7; public final static int TINYINT = -6; public final static int ...
- Html中文字过多,单行超出和多行超出显示省略号
本博客主要介绍 前端开发中文本过多,以省略号显示. 效果如图: 单行: <!--单行--> <p class="pl">这个属 ...