bzoj3223
3223: Tyvj 1729 文艺平衡树
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 3700 Solved: 2097
[Submit][Status][Discuss]
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
1 3
1 3
1 4
Sample Output
HINT
N,M<=100000
抄了抄模板,自己yy不出来
区间操作
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 100010
int n,m,root;
int size[N],fa[N],tag[N];
int child[N][];
void update(int x)
{
size[x]=size[child[x][]]+size[child[x][]]+;
}
void zig(int x)
{
int y=fa[x];
fa[x]=fa[y];
child[fa[x]][y==child[fa[x]][]]=x;
fa[child[x][]]=y; child[y][]=child[x][];
fa[y]=x; child[x][]=y;
update(x); update(y);
}
void zag(int x)
{
int y=fa[x];
// printf("----------------\n");
// printf("fa[x]=%d\n",fa[x]);
fa[x]=fa[y]; child[fa[x]][y==child[fa[x]][]]=x;
// printf("x=%d\n",x);
// printf("fa[x]=%d\n",fa[x]);
// printf("----------------\n");
fa[child[x][]]=y; child[y][]=child[x][];
fa[y]=x; child[x][]=y;
update(x); update(y);
}
void splay(int x,int t)
{
int a=fa[t];
while(fa[x]!=a)
{
int y=fa[x],z=fa[y];
if(y==t)
{
child[t][]==x?zig(x):zag(x);
break;
}
x==child[y][]?zig(x):zag(x);
x==child[z][]?zig(x):zag(x);
update(x);
}
if(!fa[x]) root=x;
update(root);
}
void pushdown(int x)
{
if(tag[x])
{
swap(child[x][],child[x][]);
tag[child[x][]]^=;
tag[child[x][]]^=;
tag[x]^=;
}
}
int find(int x,int rank)
{
pushdown(x);
// printf("x=%d rank=%d\n",x,rank);
if(size[child[x][]]+==rank) return x;
else if(size[child[x][]]>=rank) return find(child[x][],rank);
else return find(child[x][],rank-size[child[x][]]-);
}
void turn(int a,int b)
{
int x=find(root,a-),y=find(root,b+);
splay(x,root); splay(y,child[root][]);
tag[child[child[root][]][]]^=;
}
int main()
{
scanf("%d%d",&n,&m);
root=;
update();
for(int i=;i<=n+;i++)
{
fa[i]=i-;
child[i-][]=i;
update(i);
}
while(m--)
{
int a,b; scanf("%d%d",&a,&b);
a++; b++;
turn(a,b);
}
// printf("YES\n");
// printf("root=%d\n",root);
for(int i=;i<=n+;i++)
{
// printf("\n----------------\n");
printf("%d ",find(root,i)-);
}
return ;
}
bzoj3223的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- bzoj3223 文艺平衡树
传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3223 splay区间翻转的基础题,然而我还是调了一晚上(蒟蒻的悲哀) #include & ...
- bzoj3223 文艺平衡树 (treap or splay分裂+合并)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3313 Solved: 1883 [Submit][S ...
- BZOJ3223——Tyvj 1729 文艺平衡树
1.题目大意:维护序列,只有区间翻转这个操作 2.分析:splay的经典操作就是实现区间翻转,就是在splay中有一个标记,表示这个区间被翻转了 然后就是记得各种的操作访问某个点时,记得下传,顺便交换 ...
- 【BZOJ3223】 Tyvj 1729 文艺平衡树 Splay
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 ...
- bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2202 Solved: 1226[Submit][Sta ...
- BZOJ3223/洛谷P3391 - 文艺平衡树
BZOJ链接 洛谷链接 题意 模板题啦~2 代码 //文艺平衡树 #include <cstdio> #include <algorithm> using namespace ...
- 【BZOJ3223】文艺平衡树(Splay)
题面 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
随机推荐
- 笔记:xubuntu下如何让系统默认使用nvidia显卡,而不是intel集显
经反复折腾,得到如下的解决方法: prime-select nvidia 简单吧,但关系是如果让它开机自动执行一次. 反复折腾了xinitrc ,~/.xinitrc , /etc/rc.local ...
- 深入理解DOM节点类型第六篇——特性节点Attribute
× 目录 [1]特征 [2]属性 [3]方法 前面的话 元素的特性在DOM中以Attr类型表示,从技术角度讲,特性是存在于元素的attributes属性中的节点.尽管特性是节点,但却不是DOM节点树的 ...
- Mac 下使用homebrew 安装node后全局安装找不到问题
Homebrew 是mac上的包管理工具,其官网: http://brew.sh/ 在使用brew安装node之后安装一些常见工具比如 gulp npm install -g gulp 提示安装成功之 ...
- Linux 性能监测:工具
一个完整运行的 Linux 系统包括很多子系统(介绍,CPU,Memory,IO,Network,-),监测和评估这些子系统是性能监测的一部分.我们往往需要宏观的看整个系统状态,也需要微观的看每个子系 ...
- kindle型号
这篇文章为 Kindle 新手解决三个问题:怎么辨别Kindle 型号?通过 Kindle 外观判断准确吗?Kindle序列号在那里? 贴吧吧友提问的原话"在咸鱼看到一台,那哥们说也不知道K ...
- Socket--Android王国的外交发言人
Socket:原意"插座",在Java语言中为"套接字" 用于描述IP地址和端口号,是通信链的句柄,我们可以通过它向网络发送请求或者应答网络请求; 它是支持TC ...
- iOS7之后设置NavigationBar的背景
iOS7之后,请注意需要使用setBarTintColor ``` [self.navigationController.navigationBar setBarTintColor:[UIColor ...
- nginx实现单服务代理多域名
通过一台nginx服务器代理多个域名进行跳转,原理很简单,重点在玩法!适用于公司处理域名紧急备案问题. 域名: www.hx123.com www.hx456.com nginx服务器: ginx.c ...
- 什么是RAID?RAID有什么用?RAID原理
什么是RAID 硬盘是个很脆弱的东西,它经常会坏掉.所以,为了保证服务器可靠耐用,硬盘必须时时刻刻保持可用.所以有了RAID这个东西.它的目的是将好几个硬盘合并在一起,就算硬盘坏了一个,剩下还有好几个 ...
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...