BZOJ链接 洛谷链接

题意

模板题啦~×2

代码

  1. //文艺平衡树
  2. #include <cstdio>
  3. #include <algorithm>
  4. using namespace std;
  5. int const N=1e5+10;
  6. int n,m;
  7. int rt,fa[N],ch[N][2],siz[N]; bool rev[N];
  8. int wh(int p) {return p==ch[fa[p]][1];}
  9. void update(int p) {siz[p]=siz[ch[p][0]]+siz[ch[p][1]]+1;}
  10. void pushdown(int p)
  11. {
  12. if(rev[p])
  13. {
  14. swap(ch[p][0],ch[p][1]);
  15. rev[ch[p][0]]^=1; rev[ch[p][1]]^=1;
  16. rev[p]=false;
  17. }
  18. }
  19. void trPrint()
  20. {
  21. for(int i=1;i<=n+2;i++) printf("%d fa=%d son=%2d,%2d siz=%d rev=%d\n",i,fa[i],ch[i][0],ch[i][1],siz[i],rev[i]);
  22. printf("\n");
  23. }
  24. void rotate(int p,int &k)
  25. {
  26. int q=fa[p],r=fa[q],w=wh(p);
  27. if(q==k) k=p;
  28. else ch[r][q==ch[r][1]]=p;
  29. fa[ch[q][w]=ch[p][w^1]]=q;
  30. fa[ch[p][w^1]=q]=p; fa[p]=r;
  31. update(q); update(p);
  32. //printf("After rotate(%d)\n",p); trPrint();
  33. }
  34. void splay(int p,int &k)
  35. {
  36. //printf("Splay %d to %d.\n",p,k);
  37. while(p!=k)
  38. {
  39. int q=fa[p],r=fa[q];
  40. if(q!=k)
  41. if(wh(p)^wh(q)) rotate(p,k);
  42. else rotate(q,k);
  43. rotate(p,k);
  44. }
  45. }
  46. int build(int fr,int to)
  47. {
  48. if(fr>to) return 0;
  49. if(fr==to) {siz[fr]=1; return fr;}
  50. int p=(fr+to)>>1;
  51. fa[ch[p][0]=build(fr,p-1)]=p;
  52. fa[ch[p][1]=build(p+1,to)]=p;
  53. update(p);
  54. return p;
  55. }
  56. int find(int x)
  57. {
  58. int p=rt;
  59. while(true)
  60. {
  61. pushdown(p);
  62. //printf("Find No.%d in %d.\n",x,p);
  63. int sizL=siz[ch[p][0]]+1;
  64. if(sizL>x) p=ch[p][0];
  65. if(sizL==x) return p;
  66. if(sizL<x) p=ch[p][1],x-=sizL;
  67. }
  68. }
  69. void reverse(int fr,int to)
  70. {
  71. int p1=find(fr-1),p2=find(to+1);
  72. //printf("Reverse [%d,%d], p1=%d, p2=%d\n",fr,to,p1,p2);
  73. splay(p1,rt); splay(p2,ch[rt][1]);
  74. int p=ch[p2][0];
  75. rev[p]^=1;
  76. //trPrint();
  77. }
  78. void type(int p)
  79. {
  80. if(p==0) return;
  81. pushdown(p);
  82. type(ch[p][0]);
  83. if(p!=1 && p!=n+2) printf("%d ",p-1);
  84. type(ch[p][1]);
  85. }
  86. int main()
  87. {
  88. scanf("%d%d",&n,&m);
  89. rt=(n+3)>>1;
  90. build(1,n+2);
  91. for(int owo=1;owo<=m;owo++)
  92. {
  93. int fr,to;
  94. scanf("%d%d",&fr,&to);
  95. reverse(fr+1,to+1);
  96. }
  97. type(rt);
  98. return 0;
  99. }

BZOJ3223/洛谷P3391 - 文艺平衡树的更多相关文章

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

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

  2. 洛谷 P3391 文艺平衡树

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

  3. 洛谷P3391文艺平衡树(Splay)

    题目传送门 转载自https://www.cnblogs.com/yousiki/p/6147455.html,转载请注明出处 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 ...

  4. 洛谷P3391 文艺平衡树 (Splay模板)

    模板题. 注意标记即可,另外,涉及区间翻转操作,记得设立首尾哨兵. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int ...

  5. BZOJ3224/洛谷P3391 - 普通平衡树(Splay)

    BZOJ链接 洛谷链接 题意简述 模板题啦~ 代码 //普通平衡树(Splay) #include <cstdio> int const N=1e5+10; int rt,ndCnt; i ...

  6. 洛谷.3391.文艺平衡树(fhq Traep)

    题目链接 //注意反转时先分裂r,因为l,r是针对整棵树的排名 #include<cstdio> #include<cctype> #include<algorithm& ...

  7. 洛谷 P3391 【模板】文艺平衡树(Splay)

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

  8. 【阶梯报告】洛谷P3391【模板】文艺平衡树 splay

    [阶梯报告]洛谷P3391[模板]文艺平衡树 splay 题目链接在这里[链接](https://www.luogu.org/problemnew/show/P3391)最近在学习splay,终于做对 ...

  9. [luogu P3391] 文艺平衡树

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

随机推荐

  1. 端口扫描命令nmap

    转:http://www.osyunwei.com/archives/2004.html 下面教大家在CentOS中用nmap查看主机端口: 一.安装nmap yum install nmap -y ...

  2. nagios 数据更新不及时的问题

    配置nagios的时候发现一个问题,就是改变了某个主机或者服务的描述之后,在主页信息总是更新很慢,而且告警信息还是老的信息,重启多次 nagios甚至重启主机都没有解决,其实这些都是由于nagios每 ...

  3. CentOS7搭建时间服务器-chrony(不坑)

    标签(linux): chrony 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 之前centos6我们一直用的ntp时间服务器,虽然到CentOS7上也可以装 ...

  4. Jetson TX2上的demo(原创)

    Jetson TX2上的demo 一.快速傅里叶-海动图 sample The CUDA samples directory is copied to the home directory on th ...

  5. HH的项链

    传送门 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越 ...

  6. LVS、Nginx和HAProxy负载均衡器对比总结

    LVS特点: 1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生: 2.稳定性.可靠性好,自身有完美的热备方案:(如:LVS+Keepalived) 3.应用范围比较广 ...

  7. wxPython实现在浏览器中打开链接

    需要用到webbrowser模块 代码超简单: import webbrowserwebbrowser.open('http://www.wangxing.com') webbrowser.open( ...

  8. 利用回调实现Java的异步调用

    异步是指调用发出后,调用者不会立刻得到结果,而是在调用发出后,被调用者通知调用者,或通过回调函数处理这个调用. 回调简单地说就是B中有一个A,这样A在调用B的某个方法时实际上是调用到了自己的方法. 利 ...

  9. 深入理解Java内存模型之系列篇[转]

    原文链接:http://blog.csdn.net/ccit0519/article/details/11241403 深入理解Java内存模型(一)——基础 并发编程模型的分类 在并发编程中,我们需 ...

  10. 洛谷 [P2763]试题库问题

    非常舒适的最大流 非常显然的建图方法,然而因为数组开小卡了很长时间 #include <iostream> #include <cstdio> #include <alg ...