【Splay】bzoj3223-Tyvj1729文艺平衡树
一、题目
Description
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1
Input
第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n) m表示翻转操作次数
接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n
Output
输出一行n个数字,表示原始序列经过m次变换后的结果
Sample Input
5 3
1 3
1 3
1 4
Sample Output
4 3 2 1 5
HINT
N,M<=100000
顺便附上原题链接→_→Problem 3223. -- Tyvj 1729 文艺平衡树
二、代码实现
裸Splay,基本操作都不齐_(:з」∠)_不过这题有个特点,就是关键字和原序列序号是一样的,所以可以少开一个变量(虽然这并没有什么卵用┑( ̄Д  ̄)┍
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+;
int n,m;
struct node
{
int siz,fa,c[];
bool rev;//翻转标记
}tr[MAXN];
int root;
void push_up(int k)
{
tr[k].siz=tr[tr[k].c[]].siz+tr[tr[k].c[]].siz+;
return;
}
void push_down(int k)
{
if(tr[k].rev)
{
swap(tr[k].c[],tr[k].c[]);
tr[k].rev=;
tr[tr[k].c[]].rev^=,tr[tr[k].c[]].rev^=;
}
return;
}
void rotate(int &k,int x)
{
int y=tr[x].fa,z=tr[y].fa;
bool dy=tr[y].c[]==x,dz=tr[z].c[]==y;
push_down(y);
if(k==y)k=x,tr[x].fa=z;
else tr[z].c[dz]=x,tr[x].fa=z;
tr[y].c[dy]=tr[x].c[dy^],tr[tr[x].c[dy^]].fa=y;
tr[x].c[dy^]=y,tr[y].fa=x;
push_up(y);
return;
}
void splay(int &k,int x)
{
push_down(x);
while(k!=x)
{
int y=tr[x].fa,z=tr[y].fa;
if(k!=y)
{
if(tr[y].c[]==x^tr[z].c[]==y)rotate(k,x);
else rotate(k,y);
}
rotate(k,x);
}
push_up(x);
return;
}
int find(int k,int x)
{
if(!k)return ;
push_down(k);
if(x<=tr[tr[k].c[]].siz)return find(tr[k].c[],x);
if(x==tr[tr[k].c[]].siz+)return k;
return find(tr[k].c[],x-tr[tr[k].c[]].siz-);
}
void print(int k)
{
if(!k)return;
push_down(k);
print(tr[k].c[]);
if(k>&&k<n+)printf("%d ",k-);
print(tr[k].c[]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n+;++i)
{
tr[i].siz=n+-i;
tr[i].fa=i-,tr[i].c[]=i+;
}
tr[n+].c[]=,root=;
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
splay(root,find(root,l));
splay(tr[root].c[],find(root,r+));
tr[tr[tr[root].c[]].c[]].rev^=;
}
print(root);
printf("\n");
return ;
}
bzoj3223-文艺平衡树
弱弱地说一句,本蒟蒻码字也不容易,转载请注明出处http://www.cnblogs.com/Maki-Nishikino/p/6247021.html
【Splay】bzoj3223-Tyvj1729文艺平衡树的更多相关文章
- [BZOJ3223] [Tyvj1729] 文艺平衡树 (splay)
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
- [Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护 ...
- [BZOJ3223/Tyvj1729]文艺平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列 其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
- BZOJ3223:文艺平衡树——超详细题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面复制于洛谷. 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写 ...
- 【BZOJ3223】文艺平衡树(Splay)
题面 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
- 【bzoj3223】文艺平衡树
#include<bits/stdc++.h> #define N 300005 #define rat 4 using namespace std; struct Node{ int s ...
- BZOJ3223 文艺平衡树(splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- 洛谷 P3391 【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- 洛谷 P3391【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
随机推荐
- cloudera learning7:Hadoop资源管理
Linux Control Groups(cgroups):在操作系统级别进行资源分配,可通过Cloudera Static Service Pools配置. YARN调度器配置:对运行在YARN上的 ...
- CSS之伪元素
1. :first-line 向元素的首行文本添加样式,不必关心首行是元素节点还是文本节点 <style> body,htm,div,p{ margin:0; padding:0; } d ...
- 什么是ValueStack
转载自:http://www.cnblogs.com/zyw-205520/archive/2012/09/12/2681346.html Strut2的Action类通过属性可以获得所有相关的值,如 ...
- MVC4与JSON交互的知识总结
一:jquery传递JSON给MVC4后台 1.JSON传递单个参数给Controller某个Action方法 [前台js] $(document).ready(function () { var p ...
- JAVASE02-Unit08: 文本数据IO操作 、 异常处理
Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...
- Python模拟删除字符串两边的空白
目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...
- CentOS 7 yum方式配置LAMP环境
环境:CentOS 7 最小化安装 采用Putty连接 方法:采用YUM安装方法 目的:搭建Apache+Mysql+PHP环境 1,安装Apache yum install httpd //默认情况 ...
- WCF 依赖注入-- Attribute
最近,工作之余学习WCF(Windows Communication Fundation)时,感觉自己还有好多的东西需要学习呀⊙﹏⊙b汗,于是想记录下自己学习WCF的心得,以鼓励自己再接再厉,同时希望 ...
- Webform Session Cookies状态保持
Request对象的五个集合: ①.QueryString:用以获取客户端附在url地址后的查询字符串中的信息. 例如:stra=Request.QueryString ["strUserl ...
- JavaScript在A页面判断B页面加载完毕(iframe load)
今天遇到一个需求,在A页面上判断B页面是否加载完毕(B页面是第三方页面),加载完毕时隐藏loading动画... 而平时我们一般做的事是在B页面上判断B页面是否加载完毕,进行操作. if(docume ...