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

5 3

1 3

1 3

1 4

Sample Output

4 3 2 1 5

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相关推荐

  1. BZOJ 3223: Tyvj 1729 文艺平衡树(splay)

    速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...

  2. BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 6881  Solved: 4213 [Submit][S ...

  3. BZOJ3223-Tyvj 1729 文艺平衡树

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...

  4. splay区间翻转(bzoj 3223: Tyvj 1729 文艺平衡树)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 4854  Solved: 2844 [Submit][S ...

  5. [Tyvj 1729] 文艺平衡树

    题面如下: Tyvj 1729 文艺平衡树 Time Limit: 1 Sec  Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个有 ...

  6. fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)...

    题面: [模板]文艺平衡树(Splay) 题解:无 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostr ...

  7. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  8. 【Splay】【块状链表】bzoj3223 Tyvj 1729 文艺平衡树

    让蒟蒻见识到了常数大+滥用STL的危害. <法一>很久之前的Splay #include<cstdio> #include<algorithm> using nam ...

  9. bzoj 3223: Tyvj 1729 文艺平衡树

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2853  Solved: 1602 [Submit][Status][Discuss] Descri ...

  10. [HZOI 2016][Tyvj 1729]文艺平衡树 这道题我真是哭了,调了一下午,一晚上

    [题目描述] 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 [ ...

最新文章

  1. argmax最经典解释
  2. 关于JAVA并发编程你需要知道的——硬件篇
  3. linux文件编程(1)—— open、write、read、lseek、阻塞问题
  4. 【Deep Learning 一】课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)答案
  5. 用大白话彻底搞懂 HBase RowKey 详细设计!
  6. CentOS 7以yum方式安装zabbix3.2及配置文件详解
  7. sublime press key “escape” can't type anything
  8. php社交项目源代码,PHP交友聊天源码,社交网络网站源代码,带即时聊天,带聊天室功能,带原生APP源码...
  9. C语言 计算个人所得税
  10. BUUCTF misc 专题(82)[WUSTCTF2020]alison_likes_jojo
  11. 利用Euclid算法求解两个数的最大公约数及逆 matlab
  12. [ Azure - Cloud Shell ] 微软 Azure Cloud Shell 介绍
  13. 安卓模拟器配置全局代理
  14. 浏览器:免费小说的“下一站”
  15. logit回归模型_你们要的二项Logit模型在这里——离散选择模型之八
  16. 为什么需要内网穿透技术?
  17. Redis数据结构底层设计
  18. centos7 npm bulid编译报错解决
  19. EF使用时报错‘Format of the initialization string does not conform to specification starting at index 0.'
  20. DBUtils 的使用与踩坑记录

热门文章

  1. java加密不可逆,32位不可逆加密算法Java实现
  2. 英文文本处理 c github_真香警告!有了这个搜索大法,GitHub可以玩到飞起来!
  3. win7 32 java_Win7 32位系统下Java开发环境的安装及配置
  4. html 给一个无限宽,html – CSS div与其内容一样宽
  5. activity 工作流_智能风控决策引擎系统可落地实现方案(二)决策流实现
  6. 10个linux awk文本处理经典案例,Linux awk命令常用案例
  7. 机器学习- 吴恩达Andrew Ng Week6 知识总结 Machine Learning System Design
  8. 极客大学架构师训练营 大数据架构、Spark、Flink、机器学习、PageRank算法、神经网络 第13次作业
  9. mysql多表in查询_MySQL多表查询
  10. linux离线安装docx包