1. #include<bits/stdc++.h>
  2. #define N 300005
  3. #define rat 4
  4. using namespace std;
  5. struct Node{
  6. int size,val,rev;
  7. Node *lc,*rc;
  8. Node(int s,int v,Node *a,Node *b):size(s),val(v),lc(a),rc(b),rev(){}
  9. Node(){}
  10. }*nul,*rt,*st[N],t[N];
  11. int n,m,l,r,cnt,a[N];
  12. inline void pushup(Node *o){
  13. if(o->lc->size)o->size=o->lc->size+o->rc->size;
  14. }
  15. inline void pushdown(Node *o){
  16. if(o->rev){
  17. o->lc->rev^=;o->rc->rev^=;o->rev^=;
  18. swap(o->lc,o->rc);
  19. }
  20. }
  21. inline Node* newnode(int s,int v,Node *a,Node *b){
  22. return &(*st[cnt++]=Node(s,v,a,b));
  23. }
  24. Node * build(int l,int r){
  25. if(l==r)return newnode(,a[l],nul,nul);
  26. int mid=(l+r)>>;
  27. return newnode(r-l+,a[r],build(l,mid),build(mid+,r));
  28. }
  29. Node* merge(Node *a,Node *b){
  30. pushdown(a);pushdown(b);
  31. if(a->size>b->size*rat)return a->rc=merge(a->rc,b),pushup(a),a;
  32. if(b->size>a->size*rat)return b->lc=merge(a,b->lc),pushup(b),b;
  33. return newnode(a->size+b->size,b->val,a,b);
  34. }
  35. void split(int x,Node *o){
  36. pushdown(o);
  37. if(x>o->lc->size){
  38. split(x-o->lc->size,o->rc);o->lc=merge(o->lc,o->rc->lc);
  39. st[--cnt]=o->rc;o->rc=o->rc->rc;
  40. }
  41. else if(x<o->lc->size){
  42. split(x,o->lc);o->rc=merge(o->lc->rc,o->rc);
  43. st[--cnt]=o->lc;o->lc=o->lc->lc;
  44. }
  45. }
  46. void dfs(Node *o){
  47. pushdown(o);
  48. if(o->size==){if(o->val)printf("%d ",o->val);}
  49. else{dfs(o->lc);dfs(o->rc);}
  50. }
  51. inline int read(){
  52. int f=,x=;char ch;
  53. do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
  54. do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
  55. return f*x;
  56. }
  57. int main(){
  58. n=read();m=read();
  59. for(int i=;i<=n;i++)a[i]=i;
  60. for(int i=;i<=N;i++)st[i]=&t[i];
  61. nul=new Node(,,,);
  62. rt=build(,n+);
  63. while(m--){
  64. l=read(),r=read();l++;r++;
  65. split(r,rt);split(l-,rt->lc);
  66. rt->lc->rc->rev^=;
  67. }
  68. dfs(rt);
  69. return ;
  70. }

【bzoj3223】文艺平衡树的更多相关文章

  1. bzoj3223 文艺平衡树 (treap or splay分裂+合并)

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

  2. BZOJ3223文艺平衡树——非旋转treap

    此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...

  3. [BZOJ3223]文艺平衡树 无旋Treap

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

  4. BZOJ3223 文艺平衡树(splay)

    题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...

  5. JZYZOJ1998 [bzoj3223] 文艺平衡树 splay 平衡树

    http://172.20.6.3/Problem_Show.asp?id=1998 平衡树区间翻转的板子,重新写一遍,给自己码一个板子. #include<iostream> #incl ...

  6. bzoj3223 文艺平衡树

    传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3223 splay区间翻转的基础题,然而我还是调了一晚上(蒟蒻的悲哀) #include & ...

  7. [luogu3391][bzoj3223]文艺平衡树【splay】

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

  8. [bzoj3223]文艺平衡树(splay区间反转模板)

    解题关键:splay模板题. #include<cstdio> #include<cstring> #include<algorithm> #include< ...

  9. bzoj3223 文艺平衡树 codevs3303 翻转区间

    splay模版题吧 只有区间翻转 至于为什么要把须翻转区间旋到根 因为查找一个区间可以先找出他左端点左边第一个点和右端点x右边第一个点y 然后将x旋到根节点 y旋到x的右儿子 这样x的右边的点就是所有 ...

  10. [bzoj3223]文艺平衡树——splay

    题意 你应当编写一个数据结构,支持以下操作: 反转一个区间 题解 我们把在数组中的位置当作权值,这样原序列就在这种权值意义下有序,我们考虑使用splay维护. 对于操作rev[l,r],我们首先把l- ...

随机推荐

  1. BZOJ2151 种树(贪心+堆+链表/wqs二分+动态规划)

    dp容易想到,但没法进一步优化了. 考虑贪心,每次选出价值最大的物品.但这显然是不对的因为会影响其他物品的选择. 于是考虑加上反悔操作.每次选出一个物品后,将其相邻两物品删除,再将原物品价值变为相邻两 ...

  2. CSS3 transform rotate(旋转)锯齿/元素抖动模糊的解决办法

    使用CSS3 3D transforms,通过GPU来渲染,能有效的起到抗锯齿效果.只要在CSS3 transform属性中加入translateZ(0).例:-webkit-transform: r ...

  3. BZOJ3992:[SDOI2015]序列统计——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3992 https://www.luogu.org/problemnew/show/P3321 小C ...

  4. [bzoj] 2657 ZJOI2012 旅游 || bfs

    原题 题意: 一个多边形,三角剖分,求一条对角线最多能经过多少三角形 题解: 因为不涉及坐标之类的,所以根几何肯定一点关系都没有. 我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于 ...

  5. GDI & GDI+

    GDI GDI绘图中的映射模式CDC::SetMapMode() GDI编程小结 GDI+ GDI+小例子 关于GDI+ GDI+编程小结

  6. UVA.11300 Spreading the Wealth (思维题 中位数模型)

    UVA.11300 Spreading the Wealth (思维题) 题意分析 现给出n个人,每个人手中有a[i]个数的金币,每个人能给其左右相邻的人金币,现在要求你安排传递金币的方案,使得每个人 ...

  7. poj2409:Let it Bead(置换群 polya定理)

    题目大意:长度为n的项链,要染m种颜色,可以通过旋转或翻转到达的状态视为同一种,问有多少种染色方案. 学了一波polya定理,发现很好理解啊,其实就是burnside定理的扩展. burnside定理 ...

  8. 【P2602】【ZJOI2012】数字计数

    传送门 Description 给定两个正整数\(a\)和\(b\),求在\([a,b]\)中的所有整数中,每个数码(\(digit\))各出现了多少次. Input 两个正整数\(a,b\) Out ...

  9. 【贪心】【UVA10905】 Children's Game

    传送门 Description 给定n个正整数,求他们相连接后能形成的最大整数.例如:12,23这两个数能连接的最大数是2312,. Input 多组数据,每组数据中: 第一行为一个整数n 第二行有n ...

  10. openssl安装相关软件

    出现:error: openssl/md5.h: No such file or directory 原因是libssl-dev 没有安装,执行: sudo apt-get install libss ...