一、题目

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文艺平衡树的更多相关文章

  1. [BZOJ3223] [Tyvj1729] 文艺平衡树 (splay)

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...

  2. [Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护 ...

  3. [BZOJ3223/Tyvj1729]文艺平衡树

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列 其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...

  4. BZOJ3223:文艺平衡树——超详细题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面复制于洛谷. 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写 ...

  5. 【BZOJ3223】文艺平衡树(Splay)

    题面 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...

  6. 【bzoj3223】文艺平衡树

    #include<bits/stdc++.h> #define N 300005 #define rat 4 using namespace std; struct Node{ int s ...

  7. BZOJ3223 文艺平衡树(splay)

    题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...

  8. 洛谷 P3391 【模板】文艺平衡树(Splay)

    题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...

  9. 洛谷 P3391【模板】文艺平衡树(Splay)

    题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...

随机推荐

  1. cloudera learning7:Hadoop资源管理

    Linux Control Groups(cgroups):在操作系统级别进行资源分配,可通过Cloudera Static Service Pools配置. YARN调度器配置:对运行在YARN上的 ...

  2. CSS之伪元素

    1. :first-line 向元素的首行文本添加样式,不必关心首行是元素节点还是文本节点 <style> body,htm,div,p{ margin:0; padding:0; } d ...

  3. 什么是ValueStack

    转载自:http://www.cnblogs.com/zyw-205520/archive/2012/09/12/2681346.html Strut2的Action类通过属性可以获得所有相关的值,如 ...

  4. MVC4与JSON交互的知识总结

    一:jquery传递JSON给MVC4后台 1.JSON传递单个参数给Controller某个Action方法 [前台js] $(document).ready(function () { var p ...

  5. JAVASE02-Unit08: 文本数据IO操作 、 异常处理

    Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...

  6. Python模拟删除字符串两边的空白

    目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...

  7. CentOS 7 yum方式配置LAMP环境

    环境:CentOS 7 最小化安装 采用Putty连接 方法:采用YUM安装方法 目的:搭建Apache+Mysql+PHP环境 1,安装Apache yum install httpd //默认情况 ...

  8. WCF 依赖注入-- Attribute

    最近,工作之余学习WCF(Windows Communication Fundation)时,感觉自己还有好多的东西需要学习呀⊙﹏⊙b汗,于是想记录下自己学习WCF的心得,以鼓励自己再接再厉,同时希望 ...

  9. Webform Session Cookies状态保持

    Request对象的五个集合: ①.QueryString:用以获取客户端附在url地址后的查询字符串中的信息. 例如:stra=Request.QueryString ["strUserl ...

  10. JavaScript在A页面判断B页面加载完毕(iframe load)

    今天遇到一个需求,在A页面上判断B页面是否加载完毕(B页面是第三方页面),加载完毕时隐藏loading动画... 而平时我们一般做的事是在B页面上判断B页面是否加载完毕,进行操作. if(docume ...