bzoj 3223 splay模板题3
水题。。。貌似理解splay怎么维护数列了。。。
每个点维护一个size,它的位置就是它的size,区间翻转的话可以打标记,find的时候push_down,交换左右子树。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100005
#define lc(x) ch[x][0]
#define rc(x) ch[x][1]
using namespace std;
int cnt;
int k[N];
int size[N];
int lazy[N];
int ch[N][];
int dai[N];int fa[N];
int n,m;int root;
void push_up(int x)
{
size[x]=size[ch[x][]]+size[ch[x][]]+;
return ;
}
void rotate(int p)
{
int q=fa[p],y=fa[q],x=(ch[q][]==p);
ch[q][x]=ch[p][x^];fa[ch[p][x^]]=q;
ch[p][x^]=q;fa[q]=p;fa[p]=y;
if(y)
{
if(q==ch[y][])ch[y][]=p;else ch[y][]=p;
}
push_up(q);push_up(p);
return ;
}
void splay(int x,int pos)
{
for(int y;y=fa[x];rotate(x))
{
if(y==pos)break;
if(fa[y]!=pos)
{
if((ch[fa[y]][]==y&&ch[y][]==x)||(ch[fa[y]][]==y&&ch[y][]==x))rotate(y);
else rotate(x);
}
}
if(!pos)root=x;
}
void push_down(int x)
{
if(lazy[x])
{
lazy[x]=;
lazy[ch[x][]]^=;lazy[ch[x][]]^=;
swap(ch[x][],ch[x][]);
}
}
int find(int k,int rank)
{
push_down(k);
int l=ch[k][];int r=ch[k][];
if(size[l]+==rank)return k;
else if(size[l]>=rank)return find(ch[k][],rank);
else return find(ch[k][],rank-size[l]-);
}
void dfs(int x)
{
push_down(x);
if(ch[x][])dfs(ch[x][]);
if(k[x]!=&&k[x]!=n+)printf("%d ",k[x]);
if(ch[x][])dfs(ch[x][]);
}
int main()
{
scanf("%d%d",&n,&m);
cnt=n+;root=;
for(int i=;i<=n+;i++)
{
ch[i+][]=i+;
fa[i+]=i+;
k[i+]=i;
size[i+]=n+2-i;
}ch[n+][]=;
for(int i=;i<=m;i++)
{
int t1,t2;
scanf("%d%d",&t1,&t2);
int x1=find(root,t1);int x2=find(root,t2+);
splay(x1,);splay(x2,x1);
lazy[ch[x2][]]^=;
}
dfs(root);
return ;
}
/*
5 1
1 4
*/
bzoj 3223 splay模板题3的更多相关文章
- bzoj 1588 splay模板题
用晚自习学了一下splay模板,没想象中那么难,主要是左旋和右旋可以简化到一个函数里边,减少代码长度... #include<iostream> #include<cstdio> ...
- bzoj 3224 splay模板题4
再刷水题我就废了... #include<iostream> #include<cstdio> #include<algorithm> #include<cs ...
- bzoj 1208 splay模板题2
自己yy了找前驱和后继,学了学怎么删除...(反正就是练模板) #include<iostream> #include<cstdio> #include<cstring& ...
- 【BZOJ 3196】二逼平衡树 线段树套splay 模板题
我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...
- 【BZOJ 3188】【Coci 2011】Upit Splay模板题
转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include& ...
- BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题
题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...
- BZOJ 3223 Splay区间翻转
思路: 区间翻转的裸题 终于tm理解splay了-- //By SiriusRen #include <cstdio> #include <cstring> #include ...
- BZOJ 1588 平衡树 模板题
Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int si ...
- BZOJ 3224 平衡树模板题
Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n, ...
随机推荐
- JavaScript Date对象 日期获取函数
JavaScript Date对象使用小例子: 运行结果: 总结: 1.尽管我们认为12月是第12个月份,但是JavaScript从0开始计算月份,所以月份11表示12月: 2.nowDate.set ...
- div+css兼容 ie6_ie7_ie8_ie9_ie10和FireFox_Chrome等浏览器方法
1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行 ...
- iOS开发 传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- C#TCP通讯框架
开源的C#TCP通讯框架 原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发 ...
- web 前端常用组件【03】Bootstrap Multiselect
实际的项目网站中或多或少的或用到多选框,我选用的一款是 Bootstrap Multiselect. 官方文档:http://www.kuitao8.com/demo/20140224/1/boots ...
- Theano3.5-练习之深度卷积网络
来源:http://deeplearning.net/tutorial/lenet.html#lenet Convolutional Neural Networks (LeNet) note:这部分假 ...
- DOM Element节点类型详解
上文中我们讲解了 DOM 中最重要的节点类型之一的 Document 节点类型,本文我们继续深入,谈谈另一个重要的节点类型 Element . 1.概况 Element 类型用于表现 HTML 或 X ...
- Beyond Compare 3 设置自动换行
设置自动换行方法: 在菜单栏里点击“工具”,然后在弹出列表里选择“文件格式”,在弹出框的左下角编辑文件格式默认值中,选择“文本格式”,对右侧的 ‘每行字符限制’进行修改保存即可,一般可设置80或90. ...
- 流量工程 traffic engineering (TE)
什么是流量工程 流量工程是指根据各种数据业务流量的特性选取传输路径的处理过程.流量工程用于平衡网络中的不同交换机.路由器以及链路之间的负载. [编辑] 流量工程的内容 流量工程在复杂的网络环境中,控制 ...
- JavaScript instanceof 运算符深入剖析
简介: 随着 web 的发展,越来越多的产品功能都放在前端进行实现,增强用户体验.而前端开发的主要语言则是 JavaScript.学好 JavaScript 对开发前端应用已经越来越重要.在开发复杂产 ...