BZOJ 3223: Tyvj 1729 文艺平衡树
来源:互联网 发布:csgo awp 数据 编辑:程序博客网 时间:2024/05/30 04:17
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
代码
#include<iostream>#include<cstdio>using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int n,m,sz,rt;int fa[100005],c[100005][2],id[100005];int size[100005];bool rev[100005];void pushup(int k){ int l=c[k][0],r=c[k][1]; size[k]=size[l]+size[r]+1;}void pushdown(int k){ int l=c[k][0],r=c[k][1]; if(rev[k]) { swap(c[k][0],c[k][1]); rev[l]^=1;rev[r]^=1; rev[k]=0; }}void rotate(int x,int &k){ int y=fa[x],z=fa[y],l,r; if(c[y][0]==x)l=0;else l=1;r=l^1; if(y==k)k=x; else {if(c[z][0]==y)c[z][0]=x;else c[z][1]=x;} fa[x]=z;fa[y]=x;fa[c[x][r]]=y; c[y][l]=c[x][r];c[x][r]=y; pushup(y);pushup(x);}void splay(int x,int &k){ while(x!=k) { int y=fa[x],z=fa[y]; if(y!=k) { if(c[y][0]==x^c[z][0]==y)rotate(x,k); else rotate(y,k); } rotate(x,k); }}int find(int k,int rank){ pushdown(k); int l=c[k][0],r=c[k][1]; if(size[l]+1==rank)return k; else if(size[l]>=rank)return find(l,rank); else return find(r,rank-size[l]-1);}void rever(int l,int r){ int x=find(rt,l),y=find(rt,r+2); splay(x,rt);splay(y,c[x][1]); int z=c[y][0]; rev[z]^=1;}void build(int l,int r,int f){ if(l>r)return; int now=id[l],last=id[f]; if(l==r) { fa[now]=last;size[now]=1; if(l<f)c[last][0]=now; else c[last][1]=now; return; } int mid=(l+r)>>1;now=id[mid]; build(l,mid-1,mid);build(mid+1,r,mid); fa[now]=last;pushup(mid); if(mid<f)c[last][0]=now; else c[last][1]=now;}int main(){ n=read();m=read(); for(int i=1;i<=n+2;i++) id[i]=++sz; build(1,n+2,0);rt=(n+3)>>1; for(int i=1;i<=m;i++) { int l=read(),r=read(); rever(l,r); } for(int i=2;i<=n+1;i++) printf("%d ",find(rt,i)-1); return 0;}
0 0
- 【BZOJ 3223】 Tyvj 1729 文艺平衡树
- bzoj 3223: Tyvj 1729 文艺平衡树
- bzoj 3223: Tyvj 1729 文艺平衡树
- BZOJ 3223: Tyvj 1729 文艺平衡树
- BZOJ 3223 Tyvj 1729 文艺平衡树
- BZOJ 3223 Tyvj 1729 文艺平衡树
- BZOJ 3223: Tyvj 1729 文艺平衡树
- 【bzoj 3223】Tyvj 1729 文艺平衡树
- [BZOJ]3223: Tyvj 1729 文艺平衡树
- BZOJ 3223: Tyvj 1729 文艺平衡树
- 平衡树模板&&bzoj 3223&&Tyvj 1729 文艺平衡树
- 【BZOJ】Tyvj 1729 文艺平衡树 Splay
- [SPLAY维护区间][BZOJ 3223][TYVJ 1729]文艺平衡树
- bzoj 3223/tyvj 1729 文艺平衡树 splay tree
- bzoj 3223 Tyvj 1729 文艺平衡树 Splay
- bzoj 3223 Tyvj 1729 文艺平衡树 [Splay]
- Bzoj 3223: Tyvj 1729 文艺平衡树(splay)
- [BZOJ 3223]Tyvj 1729 文艺平衡树(Splay)
- 欢迎使用CSDN-markdown编辑器
- 跟小博老师一起学习数据库 ——约束(中篇)
- nyoj 304 节能 【区间dp】
- 算法课第8周第1题——494. Target Sum
- C语言指针,数组,函数总结
- BZOJ 3223: Tyvj 1729 文艺平衡树
- 系统调用的实现原理
- Hadoop 学习笔记六 Hadoop2.X 64位编译
- C语言存储类型总结(malloc,typedef)
- 多线程学习
- DAY2 作业设计
- 联想拆机清粉尘之笔记本电脑开机一直就进入bios
- 糊涂的教授
- 北漂租房记