文艺平衡树
From admin
背景 Background
此为平衡树系列第二道:文艺平衡树
描述 Description
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:
翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1
输入格式 InputFormat
第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n)  m表示翻转操作次数
接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n
 
输出格式 OutputFormat
输出一行n个数字,表示原始序列经过m次变换后的结果
 
样例输入 SampleInput [复制数据]

5 3
1 3
1 3
1 4

样例输出 SampleOutput [复制数据]
 
4 3 2 1 5 
 
数据范围和注释 Hint
n,m<=100000 
题解:
终于A了这道题,好激动。。。
也终于找到了一个好的splay模版
向序列之神--splay进发!
代码:
  1. const maxn=+;
  2. var s,id,fa:array[..maxn] of longint;
  3. rev:array[..maxn] of boolean;
  4. c:array[..maxn,..] of longint;
  5. i,n,m,rt,x,y:longint;
  6. procedure swap(var x,y:longint);
  7. var t:longint;
  8. begin
  9. t:=x;x:=y;y:=t;
  10. end;
  11.  
  12. procedure pushup(x:longint);
  13. begin
  14. s[x]:=s[c[x,]]+s[c[x,]]+;
  15. end;
  16. procedure pushdown(x:longint);
  17. var l,r:longint;
  18. begin
  19. l:=c[x,];r:=c[x,];
  20. if rev[x] then
  21. begin
  22. swap(c[x,],c[x,]);
  23. rev[l]:=not(rev[l]);
  24. rev[r]:=not(rev[r]);
  25. rev[x]:=false;
  26. end;
  27. end;
  28. procedure rotate(x:longint;var k:Longint);
  29. var l,r,y,z:longint;
  30. begin
  31. y:=fa[x];z:=fa[y];
  32. if c[y,]=x then l:= else l:=;r:=l xor ;
  33. if y=k then k:=x else c[z,ord(c[z,]=y)]:=x;
  34. fa[x]:=z;fa[y]:=x;fa[c[x,r]]:=y;
  35. c[y,l]:=c[x,r];c[x,r]:=y;
  36. pushup(y);pushup(x);
  37. end;
  38. procedure splay(x:longint;var k:longint);
  39. var y,z:longint;
  40. begin
  41. while x<>k do
  42. begin
  43. y:=fa[x];z:=fa[y];
  44. if y<>k then
  45. begin
  46. if (c[z,]=y) xor (c[y,]=x) then rotate(x,k)
  47. else rotate(y,k);
  48. end;
  49. rotate(x,k);
  50. end;
  51. end;
  52. function find(x,rank:longint):longint;
  53. var l,r:longint;
  54. begin
  55. pushdown(x);l:=c[x,];r:=c[x,];
  56. if s[l]+=rank then exit(x)
  57. else if s[l]>=rank then exit(find(l,rank))
  58. else exit(find(r,rank-s[l]-));
  59. end;
  60. procedure rever(l,r:longint);
  61. var x,y:longint;
  62. begin
  63. x:=find(rt,l);y:=find(rt,r+);
  64. splay(x,rt);splay(y,c[x,]);
  65. rev[c[y,]]:=not(rev[c[y,]]);
  66. end;
  67. procedure build(l,r,f:longint);
  68. var mid,now,last:longint;
  69. begin
  70. if l>r then exit;
  71. now:=id[l];last:=id[f];
  72. if l=r then
  73. begin
  74. fa[now]:=last;s[now]:=;
  75. c[last,ord(l>f)]:=now;
  76. exit;
  77. end;
  78. mid:=(l+r)>>;
  79. build(l,mid-,mid);build(mid+,r,mid);
  80. now:=id[mid];pushup(mid);
  81. fa[now]:=last;
  82. c[last,ord(mid>f)]:=now;
  83. end;
  84. procedure init;
  85. begin
  86. readln(n,m);
  87. for i:= to n+ do id[i]:=i;
  88. build(,n+,);rt:=(n+)>>;
  89. end;
  90. procedure main;
  91. begin
  92. for i:= to m do
  93. begin
  94. readln(x,y);
  95. rever(x,y);
  96. end;
  97. for i:= to n+ do write(find(rt,i)-,' ');
  98. end;
  99. begin
  100. assign(input,'input.txt');assign(output,'output.txt');
  101. reset(input);rewrite(output);
  102. init;
  103. main;
  104. close(input);close(output);
  105. end.

tyvj 1729 文艺平衡树的更多相关文章

  1. [BZOJ3223]Tyvj 1729 文艺平衡树

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

  2. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3595  Solved: 2029[Submit][Sta ...

  3. BZOJ 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 2052[Submit][Sta ...

  4. bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2202  Solved: 1226[Submit][Sta ...

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

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

  6. 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1347  Solved: 724[Submit][Stat ...

  7. bzoj 3223: Tyvj 1729 文艺平衡树 (splay)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面: 3223: Tyvj 1729 文艺平衡树 Time Limit: 10 S ...

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

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

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

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

随机推荐

  1. python拆分excel脚本

    因为需要将一个很大的excel按500条拆分为多个excel,手工操作实在太麻烦,就写了个python小脚本,现在是分为了多个sheet页,使用者可根据自己实际情况修改成多个文件的形式 #!/usr/ ...

  2. lamp 中基本配置常识

    // apache// 禁止访问目录// 开启 url重写// 重写定义错误页面// 日志分页// 增加并发连接数// 设置连接连接的时间 // threadsPerChild // 每个进程的线程数 ...

  3. 51nod贪心算法入门-----活动安排问题2

    题目大意就是给几个活动,问要几个教室能够弄完. 这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数. #inclu ...

  4. wamp——利用phpmyadmin修改数据库密码

    一.wamp版本         我采用的是 WampServer2.2a-x32.exe 这个版本的安装程序. 二.问题描述         安装wamp后,mysql数据库默认密码为空,但是由于某 ...

  5. 修改centos环境变量

    1.vim /etc/profile 2.PATH=$PATH:/usr/local/php/bin;export PATH 3.source /etc/profile

  6. WPF从入门到放弃系列第一章 初识WPF

    什么是WPF WPF(Windows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分.它提供 ...

  7. 开发设计模式(五)单例模式(Singleton Pattern)

    http://blog.sina.com.cn/s/blog_89d90b7c0101805m.html 单例模式:意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提 ...

  8. Lucene基础(四)-- 结合数据库使用

    需求 很多时候我们在用数据库的需要使用模糊查询,我们一般会使用like语句来做,然而这样的做的效率不是很多(很抱歉我们亲自去测,很多都这么说的),那么使用Lucene来检索的话,效率会高很多. luc ...

  9. 服务器环境搭建系列(二)-Tomcat篇

    1.解压缩Tomcat的tar包,默认放在opt下 tar -zxvf apache-tomcat-6.0.35.tar.gz 2.输入如下命令修改tomcat配置文件 vi /opt/apache- ...

  10. 解决Win8.1 / Win Server 2012 r2 下安装 Visual Studio 时一直要求重新启动的问题(原创)

    注:本文为作者原创文章,转载于引用请注明出处,谢谢. 今天在x64的英文版Windows Server 2012 r2上安装最新版的 Visual Studio 2015 Exterprise 时,提 ...