一、题目

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. WINDOWS下PhoneGap(Cordova)安装笔记

    1.首先下载Node.js  安装nodejs很简单直接点击安装文件下一步直至成功即可,安装notejs的同时npm也会同时安装 成功后打开notejs的命令行工具 输入“node -v”," ...

  2. Spring注解@Resource和@Autowired区别对比

    转载:http://www.cnblogs.com/think-in-java/p/5474740.html @Resource和@Autowired都是做bean的注入时使用,其实@Resource ...

  3. Error:java:Compilation failed: internal java compiler error

    在IDEA中编译时出现这个错误:Error:java:Compilation failed: internal java compiler error! Information:Using javac ...

  4. Python开发【十一章】:RabbitMQ队列

    RabbitMQ队列 rabbitMQ是消息队列:想想之前的我们学过队列queue:threading queue(线程queue,多个线程之间进行数据交互).进程queue(父进程与子进程进行交互或 ...

  5. Spring松耦合实例

    假设你的项目有一个函数输出的内容,以CSV或JSON格式.您的代码可能看起来像下面的例子: File : IOutputGenerator.java – 输出生成器接口 package com.yii ...

  6. ReadMe.md MarkDown file

    MarkDown 文件写法类似写Confluence page. http://blog.csdn.net/kaitiren/article/details/38513715

  7. js时间格式化

    const formatDate = timestamp => { const date = new Date(timestamp); const m = date.getMonth() + 1 ...

  8. XPath Axes(轴)

    XML 实例文档 我们将在下面的例子中使用此 XML 文档: <?xml version="1.0" encoding="ISO-8859-1"?> ...

  9. linux centos service 参数详解

    Service文件 开门见山,直接来看两个实际的服务配置文件吧. 第一个配置是 CoreOS 系统中 Docker 服务的 Unit 文件,路径是 /usr/lib/systemd/system/do ...

  10. (一)sql入门 导读

    从转行做软件始,就开始接触sql,但还是不怎么深入,回忆3月份找工作的时候,左关联都没有写出来,真是丢脸,以此博客做个认真的开始. 以后的日子,遇到了圆柱体的空心物体,我就应该联想到一样东西,那就是数 ...