内存限制:256 MiB 时间限制:1000 ms 标准输入输出
                            题目类型:传统 评测方式:文本比较
                                上传者: 匿名
 

splay模板题

屠龙宝刀点击就送

  1. #include <cstdio>
  2. typedef long long LL;
  3. #define N 300500
  4.  
  5. LL data[N];
  6. int siz[N],cnt[N],ch[N][],fa[N],root,cn,n;
  7. inline int son(int x) {return ch[fa[x]][]==x;}
  8. inline void pushup(int rt)
  9. {
  10. int l=ch[rt][],r=ch[rt][];
  11. siz[rt]=cnt[rt]+siz[l]+siz[r];
  12. }
  13. inline void rotate(int x)
  14. {
  15. int y=fa[x],z=fa[y],b=son(x),c=son(y),a=ch[x][!b];
  16. if(z) ch[z][c]=x;
  17. else root=x;
  18. fa[x]=z;
  19. if(a) fa[a]=y;
  20. ch[y][b]=a;
  21. ch[x][!b]=y;
  22. fa[y]=x;
  23. pushup(y);
  24. pushup(x);
  25. }
  26. void splay(int x,int i)
  27. {
  28. for(;fa[x]!=i;)
  29. {
  30. int y=fa[x],z=fa[y];
  31. if(z==i) rotate(x);
  32. else
  33. {
  34. if(son(x)==son(y))
  35. {
  36. rotate(y);
  37. rotate(x);
  38. }
  39. else
  40. {
  41. rotate(x);
  42. rotate(x);
  43. }
  44. }
  45. }
  46. }
  47. void ins(int &rt,LL x)
  48. {
  49. if(!rt)
  50. {
  51. rt=++cn;
  52. data[cn]=x;
  53. siz[cn]=cnt[cn]=;
  54. splay(cn,);
  55. return;
  56. }
  57. if(data[rt]==x)
  58. {
  59. cnt[rt]++;
  60. siz[rt]++;
  61. splay(rt,);
  62. return;
  63. }
  64. if(x<data[rt])
  65. {
  66. ins(ch[rt][],x);
  67. fa[ch[rt][]]=rt;
  68. pushup(rt);
  69. }
  70. else
  71. {
  72. ins(ch[rt][],x);
  73. fa[ch[rt][]]=rt;
  74. pushup(rt);
  75. }
  76. }
  77. int getmn(int rt)
  78. {
  79. int p=rt,ans=-;
  80. for(;p;p=ch[p][]) ans=p;
  81. return ans;
  82. }
  83. void del(int rt,LL x)
  84. {
  85. if(data[rt]==x)
  86. {
  87. if(cnt[rt]>)
  88. {
  89. cnt[rt]--;
  90. siz[rt]--;
  91. }
  92. else
  93. {
  94. splay(rt,);
  95. int p=getmn(ch[rt][]);
  96. if(p!=-)
  97. {
  98. splay(p,rt);
  99. root=p;
  100. fa[p]=;
  101. ch[p][]=ch[rt][];
  102. fa[ch[rt][]]=p;
  103. }
  104. else
  105. {
  106. root=ch[rt][];
  107. fa[ch[rt][]]=;
  108. }
  109. }
  110. return;
  111. }
  112. if(x<data[rt])
  113. {
  114. del(ch[rt][],x);
  115. pushup(rt);
  116. }
  117. else
  118. {
  119. del(ch[rt][],x);
  120. pushup(rt);
  121. }
  122. }
  123. int getkth(int rt,int k)
  124. {
  125. int l=ch[rt][];
  126. if(siz[l]+<=k&&k<=siz[l]+cnt[rt]) return rt;
  127. if(siz[l]+>k) return getkth(ch[rt][],k);
  128. else if(k>siz[l]+cnt[rt]) return getkth(ch[rt][],k-(siz[l]+cnt[rt]));
  129. }
  130. int get_suc(int rt,LL x)
  131. {
  132. int p=rt,ret=-;
  133. for(;p;)
  134. {
  135. if(x>=data[p]) p=ch[p][];
  136. else
  137. {
  138. ret=p;
  139. p=ch[p][];
  140. }
  141. }
  142. return ret;
  143. }
  144. int get_pre(int rt,LL x)
  145. {
  146. int p=rt,ret=-;
  147. for(;p;)
  148. {
  149. if(x<=data[p]) p=ch[p][];
  150. else
  151. {
  152. ret=p;
  153. p=ch[p][];
  154. }
  155. }
  156. return ret;
  157. }
  158. int get_pos(int rt,LL x)
  159. {
  160. if(data[rt]==x) return rt;
  161. if(x<data[rt]) return get_pos(ch[rt][],x);
  162. else return get_pos(ch[rt][],x);
  163. }
  164. int Main()
  165. {
  166. scanf("%d",&n);
  167. for(LL opt,x,pos,flag;n--;)
  168. {
  169. scanf("%lld%lld",&opt,&x);
  170. if(!opt) ins(root,x);
  171. else if(opt==) del(root,x);
  172. else if(opt==) printf("%lld\n",data[getkth(root,x)]);
  173. else if(opt==) ins(root,x),pos=get_pos(root,x),splay(pos,),printf("%d\n",siz[ch[root][]]),del(root,x);
  174. else if(opt==) pos=get_pre(root,x),pos==-?printf("-1\n"):printf("%lld\n",data[pos]);
  175. else pos=get_suc(root,x),pos==-?printf("-1\n"):printf("%lld\n",data[pos]);
  176. }
  177. return ;
  178. }
  179. int sb=Main();
  180. int main(int argc,char *argv[]) {;}

LibreOJ #107. 维护全序集的更多相关文章

  1. loj #107. 维护全序集

    #107. 维护全序集 题目描述 这是一道模板题,其数据比「普通平衡树」更强. 如未特别说明,以下所有数据均为整数. 维护一个多重集 S SS ,初始为空,有以下几种操作: 把 x xx 加入 S S ...

  2. 2018.07.24 loj#107. 维护全序集(非旋treap)

    传送门 就是普通平衡树,可以拿来练非旋treap" role="presentation" style="position: relative;"&g ...

  3. LOJ#107. 维护全序集(FHQ Treap)

    题面 传送门 题解 板子,没啥好说的 //minamoto #include<bits/stdc++.h> #define R register #define inline __inli ...

  4. LOJ107. 维护全序集【树状数组维护全序集】

    题目描述 这是一道模板题,其数据比「普通平衡树」更强. 如未特别说明,以下所有数据均为整数. 维护一个多重集 S ,初始为空,有以下几种操作: 把 x 加入 S 删除 S 中的一个 x,保证删除的 x ...

  5. 【GXZ的原创】平衡树性能测试

    本文作者为 GXZlegend ,转载请注明 出处 ,谢谢! 〇.序言 前些日子闲的蛋疼做了个平衡树性能测试... 主要是因为学会的平衡树越来越多,做题时却不知道写哪个... 本想结合效率和代码复杂度 ...

  6. BSA基础数据维护

    平台 BSA基础数据维护 .扇区五个字段的内容 本来值为0,经过107上计算解析,得出正常的数值.然后106上报(200050),得到回复(200051). 查看回复数据,是否有错误.比如提示104 ...

  7. LibreOJ 题解汇总

    目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #10 ...

  8. Oracle 11g 物理Dataguard日常操作维护(二)

    Oracle 11g 物理Dataguard日常操作维护(二) 2017年8月25日 14:34 3.3 3.3.1 查看备库进程状态 SYS(125_7)@fpyj123> select pr ...

  9. 102. Binary Tree Level Order Traversal + 103. Binary Tree Zigzag Level Order Traversal + 107. Binary Tree Level Order Traversal II + 637. Average of Levels in Binary Tree

    ▶ 有关将一棵二叉树转化为二位表的题目,一模一样的套路出了四道题 ▶ 第 102 题,简单的转化,[ 3, 9, 20, null, null, 15, 7 ] 转为 [ [ 15, 7 ] , [ ...

随机推荐

  1. 交互原型设计软件axure rp学习之路(一)

    开始学习之前,请一定要明白:Axure是个极其极其极其简单的软件.因为你所做的就是拖部件,打字,拖部件,打字,最多加个对齐.如果你能把axure当作word或者ppt来用,那你就学会了axure. A ...

  2. 怎么判断DropDownList是否选择值

    判断其 SelectedIndex 属性值 >0.

  3. Javascript实现打开或退出浏览器全屏

    废话不多说,直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www. ...

  4. 51nod 1086【背包·DP】

    思路: 如果体积乘以数量>=W,那么直接用完全背包模型.如果不到的话,用二进制优化就好了. 基础题,感觉这样写很优雅?回去睡觉. #include <bits/stdc++.h> u ...

  5. AES 加密 PHP 和 JAVA 互通

    PHP代码: <?php class Security { public static function encrypt($input, $key) { $size = mcrypt_get_b ...

  6. Python书写规范

    一.python脚本的规范: 每个脚本都有自己的规范,以下的规范不是强制的,但是规范一下,可以使你的脚本规范.易懂.方便使用. #!/usr/bin/env python # -*- coding: ...

  7. PJzhang:安全小课堂-安全软件为什么很重要,看这里!

    猫宁!!! 参考链接: http://www.360.cn/webzhuanti/mianyigongju.html https://www.freebuf.com/fevents/204100.ht ...

  8. JavaScript进阶 - 第10章 编程挑战

    10-1 编程挑战 现在利用之前我们学过的JavaScript知识,实现选项卡切换的效果. 效果图:

  9. C# 数组之int[]

    一.数组分类 数组可以简单分为3类: 1维数组 2维数组 交错数组 二.数组初始化 1.一维数组 int [] A = { 1,2,3,4 } 直接赋值 或者 int [] A = new int [ ...

  10. Django-Rest-Framework的权限和频率

    Django-Rest-Framework的权限和频率 restful framework DRF的权限 权限是什么 权限到底是是干什么用的 比如,我们申请博客的时候,一定要向管理员申请,也就是说管理 ...