bzoj3223Tyvj 1729 文艺平衡树 splay
3223: Tyvj 1729 文艺平衡树
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 5644 Solved: 3362
[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
裸的区间翻转
具体操作: 旋转[l,r] 把l-1调到根,r+1调到根右儿子,那么r+1左子树就是[l,r]区间,对这颗子树的根加一个rev标记即可
查询的时候,如果当前节点被rev标记,应该交换左右儿子去寻找,并向下传标记
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define N 100050
using namespace std;
int n,m,rt,id[N],fa[N],ch[N][2],rev[N],siz[N];void pushup(int u){int l=ch[u][0],r=ch[u][1];siz[u]=siz[l]+siz[r]+1;
}
void pushdown(int u){if(!rev[u])return;int l=ch[u][0],r=ch[u][1];swap(ch[u][0],ch[u][1]);rev[l]^=1;rev[r]^=1;rev[u]=0;
}
void rotate(int x,int &k){int y=fa[x],z=fa[y],l,r;l= ch[y][1]==x;r=l^1;if(y==k)k=x;else ch[z][ch[z][1]==y]=x;fa[x]=z;fa[y]=x;fa[ch[x][r]]=y;ch[y][l]=ch[x][r];ch[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((ch[y][0]==x)^(ch[z][0]==y))rotate(x,k);else rotate(y,k); }rotate(x,k);}
}
void build(int l,int r,int f){if(l>r)return;int now=id[l],ls=id[f];if(l==r){fa[now]=ls;siz[now]=1;ch[ls][l>f]=now;return;}int mid=(l+r)>>1;now=id[mid];build(l,mid-1,now);build(mid+1,r,now);fa[now]=ls;pushup(now);ch[ls][now>ls]=now;
}
int find(int u,int rk){pushdown(u);int l=ch[u][0],r=ch[u][1];if(siz[l]+1==rk)return u;else if(siz[l]>=rk)return find(l,rk);return find(r,rk-siz[l]-1);
}
void rever(int l,int r){int x=find(rt,l),y=find(rt,r+2);splay(x,rt);splay(y,ch[x][1]);rev[ch[y][0]]^=1;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n+2;i++)id[i]=i;build(1,n+2,0);rt=(n+3)>>1;int l,r;while(m--){scanf("%d%d",&l,&r);rever(l,r); }for(int i=2;i<=n+1;i++)printf("%d ",find(rt,i)-1);return 0;
}
转载于:https://www.cnblogs.com/wsy01/p/8092910.html
bzoj3223Tyvj 1729 文艺平衡树 splay相关推荐
- BZOJ 3223: Tyvj 1729 文艺平衡树(splay)
速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...
- BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6881 Solved: 4213 [Submit][S ...
- BZOJ3223-Tyvj 1729 文艺平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
- splay区间翻转(bzoj 3223: Tyvj 1729 文艺平衡树)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 4854 Solved: 2844 [Submit][S ...
- [Tyvj 1729] 文艺平衡树
题面如下: Tyvj 1729 文艺平衡树 Time Limit: 1 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个有 ...
- fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)...
题面: [模板]文艺平衡树(Splay) 题解:无 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostr ...
- [洛谷P3391] 文艺平衡树 (Splay模板)
初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...
- 【Splay】【块状链表】bzoj3223 Tyvj 1729 文艺平衡树
让蒟蒻见识到了常数大+滥用STL的危害. <法一>很久之前的Splay #include<cstdio> #include<algorithm> using nam ...
- bzoj 3223: Tyvj 1729 文艺平衡树
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2853 Solved: 1602 [Submit][Status][Discuss] Descri ...
- [HZOI 2016][Tyvj 1729]文艺平衡树 这道题我真是哭了,调了一下午,一晚上
[题目描述] 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 [ ...
最新文章
- argmax最经典解释
- 关于JAVA并发编程你需要知道的——硬件篇
- linux文件编程(1)—— open、write、read、lseek、阻塞问题
- 【Deep Learning 一】课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)答案
- 用大白话彻底搞懂 HBase RowKey 详细设计!
- CentOS 7以yum方式安装zabbix3.2及配置文件详解
- sublime press key “escape” can't type anything
- php社交项目源代码,PHP交友聊天源码,社交网络网站源代码,带即时聊天,带聊天室功能,带原生APP源码...
- C语言 计算个人所得税
- BUUCTF misc 专题(82)[WUSTCTF2020]alison_likes_jojo
- 利用Euclid算法求解两个数的最大公约数及逆 matlab
- [ Azure - Cloud Shell ] 微软 Azure Cloud Shell 介绍
- 安卓模拟器配置全局代理
- 浏览器:免费小说的“下一站”
- logit回归模型_你们要的二项Logit模型在这里——离散选择模型之八
- 为什么需要内网穿透技术?
- Redis数据结构底层设计
- centos7 npm bulid编译报错解决
- EF使用时报错‘Format of the initialization string does not conform to specification starting at index 0.'
- DBUtils 的使用与踩坑记录
热门文章
- java加密不可逆,32位不可逆加密算法Java实现
- 英文文本处理 c github_真香警告!有了这个搜索大法,GitHub可以玩到飞起来!
- win7 32 java_Win7 32位系统下Java开发环境的安装及配置
- html 给一个无限宽,html – CSS div与其内容一样宽
- activity 工作流_智能风控决策引擎系统可落地实现方案(二)决策流实现
- 10个linux awk文本处理经典案例,Linux awk命令常用案例
- 机器学习- 吴恩达Andrew Ng Week6 知识总结 Machine Learning System Design
- 极客大学架构师训练营 大数据架构、Spark、Flink、机器学习、PageRank算法、神经网络 第13次作业
- mysql多表in查询_MySQL多表查询
- linux离线安装docx包