【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, ...
随机推荐
- java获取到机器IP地址及MAC码
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.InetAddress; import java.ne ...
- LeetCode Reverse Vowels of a String
原题链接在这里:https://leetcode.com/problems/reverse-vowels-of-a-string/ 题目: Write a function that takes a ...
- http的一些事
查找资料将http中缓存相关的知识记录下 一般来说:Last-Modifed和Expires是一对,ETag和Cache-Control是一对 Last-Modified Client端跟Server ...
- git 添加 文件到GitHub
用pycharm写代码,暂时不太了解它的版本控制方式,使用git托管到 GitHub. 1. 在被提交的文件夹下,运行 git init,初始化git; 2. 添加需要提交的文件, git add ...
- VS工程添加资源文件
1. 添加资源文件: 2. 资源文件内写相应代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006 ...
- 1.初识Linux
1.严格来讲,Linux不是一个操作系统,只是Linux系统的内核,它是计算机的软件与硬件连通的枢纽. 2.关机和重启指令 关机:(1)init 0 关闭前清理和更新有关信息 (2 ...
- JSP 登录与注册的小案例之二(无验证码,前端拦截空参)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- 记一次MVC4站点在IIS上部署的诡异问题
最近朋友的公司遇到一个站点部署问题, 朋友从事服务器维护多年,说也是花了十多天仍为解决. 经多次尝试未果,仍报错如下: 我询问了相关情况,确认了该网站是VS2013开发的,版本为,NET Framew ...
- python中遍历文件的3个方法
转自: http://www.jb51.net/article/54640.htm 用python进行文件遍历有多种方法,这里列举并说明一下. os.path.walk() 这是一个传统的用法. wa ...
- 用node-inspector调试Node.js(转自NOANYLOVE'S BLOG)
原文地址:http://www.noanylove.com/2011/12/node-the-inspector-debugging-node-js/ 用node-inspector调试Node.js ...