bzoj3223 文艺平衡树
传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3223
splay区间翻转的基础题,然而我还是调了一晚上(蒟蒻的悲哀)
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,root,x,y;
int ls[100005],rs[100005],s[100005],v[100005],lazy[100005],fa[100005],f[100005];
void pushup(int rt)
{
s[rt]=s[ls[rt]]+s[rs[rt]]+1;
}
void pushdown(int rt)
{
if (!lazy[rt]) return;
swap(ls[rt],rs[rt]);
lazy[ls[rt]]^=1;
lazy[rs[rt]]^=1;
lazy[rt]=0;
}
void build(int l,int r,int fa)
{
if (l>r) return;
int now=v[l];
int last=v[fa];
if (l==r)
{
s[now]=1;
f[now]=last;
if (l<fa) ls[last]=now;
else rs[last]=now;
return;
}
int mid=(l+r)>>1;
now=v[mid];
build(l,mid-1,mid);
build(mid+1,r,mid);
f[now]=last;
if (mid<fa) ls[last]=now;
else rs[last]=now;
pushup(mid);
}
void zig(int x)
{
int y=f[x],z=f[y];
if (ls[z]==y) ls[z]=x;
else rs[z]=x;
f[x]=z;
f[y]=x;
ls[y]=rs[x];
f[rs[x]]=y;
rs[x]=y;
pushup(y);
pushup(x);
if (y==root) root=x;
}
void zag(int x)
{
int y=f[x],z=f[y];
if (ls[z]==y) ls[z]=x;
else rs[z]=x;
f[x]=z;
f[y]=x;
rs[y]=ls[x];
f[ls[x]]=y;
ls[x]=y;
pushup(y);
pushup(x);
if (y==root) root=x;
}
void splay(int x,int k)
{
while(f[x]!=k)
{
if (ls[f[x]]==x) zig(x);
else zag(x);
}
}
int find(int &k,int x)
{
pushdown(k);
if(s[ls[k]]+1==x)return k;
if(s[ls[k]]>=x)return find(ls[k],x);
return find(rs[k],x-s[ls[k]]-1);
}
void lazye(int l,int r)
{
int x=find(root,l);
int y=find(root,r);
splay(x,0);
splay(y,x);
lazy[ls[y]]^=1;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n+2;i++)
{
v[i]=i;
}
root=(n+3)>>1;
build(1,n+2,0);
for (int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
lazye(x,y+2);
}
for (int i=2;i<=n+1;i++)
{
printf("%d ",find(root,i)-1);
}
}
bzoj3223 文艺平衡树的更多相关文章
- bzoj3223 文艺平衡树 (treap or splay分裂+合并)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3313 Solved: 1883 [Submit][S ...
- BZOJ3223文艺平衡树——非旋转treap
此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
- [BZOJ3223]文艺平衡树 无旋Treap
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...
- BZOJ3223 文艺平衡树(splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- JZYZOJ1998 [bzoj3223] 文艺平衡树 splay 平衡树
http://172.20.6.3/Problem_Show.asp?id=1998 平衡树区间翻转的板子,重新写一遍,给自己码一个板子. #include<iostream> #incl ...
- [luogu3391][bzoj3223]文艺平衡树【splay】
题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 分析 ...
- [bzoj3223]文艺平衡树(splay区间反转模板)
解题关键:splay模板题. #include<cstdio> #include<cstring> #include<algorithm> #include< ...
- bzoj3223 文艺平衡树 codevs3303 翻转区间
splay模版题吧 只有区间翻转 至于为什么要把须翻转区间旋到根 因为查找一个区间可以先找出他左端点左边第一个点和右端点x右边第一个点y 然后将x旋到根节点 y旋到x的右儿子 这样x的右边的点就是所有 ...
- [bzoj3223]文艺平衡树——splay
题意 你应当编写一个数据结构,支持以下操作: 反转一个区间 题解 我们把在数组中的位置当作权值,这样原序列就在这种权值意义下有序,我们考虑使用splay维护. 对于操作rev[l,r],我们首先把l- ...
随机推荐
- C语言中printf的规范输出
1.调用格式为 printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另 ...
- JMS
发消息 与 收消息 http://www.huaishao8.com/config/activemq/143.html http://yingzhuo.iteye.com/blog/1566612 h ...
- CS193P - 2016年秋 第三讲 Swift 语言及 Foundation 框架
这一讲介绍一些 Swift 的重点概念.特别是一些有别于其它语言的地方.但本质上还都是语法糖. 想充分理解这一讲的内容,最好的方式就是 打开 playgound,亲自动手来实验. 1,Optional ...
- Java语言程序设计(基础篇) 第七章 一维数组
第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...
- Android 强烈推荐:程序员接私活那点事
今天周末在家宅着,并不是我不想运动,是因为北京的雨雪交加导致我想在家写文章,不过想想给大家写文章还是蛮惬意的,望一眼窗外,看一眼雪景,指尖在键盘上跳动,瞬间有种从屌丝程序员转变成了小姑娘们都羡慕的文艺 ...
- 使用intellij的svn时提示出错: Can't use Subversion command line client: svn.Errors found while svn working copies detection.
使用Intellij的svn时提示出错:Can't use Subversion command line client: svn. Errors found while svn working co ...
- iOS网络相关知识总结
iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...
- CentOS 7使用nmcli配置双网卡聚合
进入CentOS 7以后,网络方面变化比较大,例如eth0不见了,ifconfig不见了,其原因是网络服务全部都由NetworkManager管理了,下面记录下今天下午用nmcli配置的网卡聚合,网络 ...
- ElasticSearch 入门笔记1
1. 起步 1. 建demo工程,看文档,做典型demo 2. 资源列表: http://es.xiaoleilu.com/010_Intro/10_Installing_ES.html 3. 启动: ...
- python爬虫感想
老师说,能用程序解决一个实际问题,说明已经会使用工具了.今天用python做了一个小爬虫,很幸运,成功了. 有几个难点:就是学会伪装,还有一个觉得打开的方式太多,有点糊涂,正则表达式也要加强了.