Treap 的各种操作,模板题,要再写几遍

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <cmath>
  7. #include <ctime>
  8.  
  9. using namespace std;
  10.  
  11. class Treap
  12. {
  13. private:
  14. struct Treap_Point
  15. {
  16. int l,r,val,size,key,num;
  17. Treap_Point(){l=r=val=size=key=num=;}
  18. };
  19. Treap_Point d[];
  20. int root,cnt;
  21. pair<int,int> tmp;
  22.  
  23. void update(const int t)
  24. {
  25. d[t].size=d[d[t].l].size+
  26. d[d[t].r].size+d[t].num;
  27. return ;
  28. }
  29.  
  30. void turn_R(int & t)
  31. {
  32. int temp=d[t].l;d[t].l=d[temp].r;d[temp].r=t;
  33. d[temp].size=d[t].size;update(t);t=temp;return ;
  34. }
  35.  
  36. void turn_L(int & t)
  37. {
  38. int temp=d[t].r;d[t].r=d[temp].l;d[temp].l=t;
  39. d[temp].size=d[t].size;update(t);t=temp;return ;
  40. }
  41.  
  42. void insert(int & t,const int x)
  43. {
  44. if(!t)
  45. {
  46. cnt++;t=cnt;d[t].size=d[t].num=;
  47. d[t].val=x,d[t].key=rand();
  48. return ;
  49. }
  50. d[t].size++;
  51. if(d[t].val==x)d[t].num++;
  52. else if(x<=d[t].val)
  53. {
  54. insert(d[t].l,x);
  55. if(d[d[t].l].key<d[t].key)turn_R(t);
  56. }
  57. else
  58. {
  59. insert(d[t].r,x);
  60. if(d[d[t].r].key<d[t].key)turn_L(t);
  61. }
  62. return ;
  63. }
  64.  
  65. void erase(int & t,const int x)
  66. {
  67. if(!t)return ;
  68. if(d[t].val==x)
  69. {
  70. if(d[t].num>)
  71. {
  72. d[t].num--;d[t].size--;return ;
  73. }
  74. if(d[t].l*d[t].r==)t=d[t].l+d[t].r;
  75. else if(d[d[t].l].key<d[d[t].r].key)
  76. turn_R(t),erase(t,x);
  77. else
  78. turn_L(t),erase(t,x);
  79. }
  80. else if(x<=d[t].val)d[t].size--,erase(d[t].l,x);
  81. else d[t].size--,erase(d[t].r,x);
  82. return ;
  83. }
  84.  
  85. int get(const int & t,const int x)
  86. {
  87. if(t==)return ;
  88. if(x<=d[d[t].l].size)return get(d[t].l,x);
  89. else if(x>d[d[t].l].size+d[t].num)
  90. return get(d[t].r,x-d[d[t].l].size-d[t].num);
  91. return d[t].val;
  92. }
  93.  
  94. int upper_bound(const int & t,const int x,const int step)
  95. {
  96. if(t==)return ;
  97. if(x<d[t].val)tmp=min(tmp,make_pair(d[t].val,step));
  98. if(x>=d[t].val)upper_bound(d[t].r,x,step+d[d[d[t].r].l].size+d[t].num);
  99. else upper_bound(d[t].l,x,step-d[d[d[t].l].r].size-d[d[t].l].num);
  100. return tmp.second;
  101. }
  102.  
  103. int lower_bound(const int & t,const int x,const int step)
  104. {
  105. if(t==)return ;
  106. if(x<=d[t].val)tmp=min(tmp,make_pair(d[t].val,step));
  107. if(x>d[t].val)lower_bound(d[t].r,x,step+d[d[d[t].r].l].size+d[t].num);
  108. else lower_bound(d[t].l,x,step-d[d[d[t].l].r].size-d[d[t].l].num);
  109. return tmp.second;
  110. }
  111.  
  112. public:
  113. void insert(const int x)
  114. {
  115. insert(root,x);
  116. }
  117. void erase(const int x)
  118. {
  119. erase(root,x);
  120. }
  121. int get(const int x)
  122. {
  123. return get(root,x);
  124. }
  125. int upper_bound(const int x)
  126. {
  127. tmp=make_pair(0x7fffffff,);
  128. return upper_bound(root,x,d[d[root].l].size+);
  129. }
  130. int lower_bound(const int x)
  131. {
  132. tmp=make_pair(0x7fffffff,);
  133. return lower_bound(root,x,d[d[root].l].size+);
  134. }
  135. }S;
  136.  
  137. int n;
  138.  
  139. int main()
  140. {
  141. int i,op,x;
  142.  
  143. scanf("%d",&n);
  144.  
  145. S.insert(0x7ffffff0);
  146. for(i=;i<=n;++i)
  147. {
  148. scanf("%d%d",&op,&x);
  149. if(op==)S.insert(x);
  150. if(op==)S.erase(x);
  151. if(op==)printf("%d\n",S.lower_bound(x));
  152. if(op==)printf("%d\n",S.get(x));
  153. if(op==)printf("%d\n",S.get(S.lower_bound(x)-));
  154. if(op==)printf("%d\n",S.get(S.upper_bound(x)));
  155. }
  156.  
  157. return ;
  158. }

[bzoj3224]普通平衡树[Treap]的更多相关文章

  1. [日常摸鱼]bzoj3224普通平衡树-Treap、Splay、01Trie、替罪羊树…

    http://www.lydsy.com/JudgeOnline/problem.php?id=3224 经典的平衡树模板题-各种平衡树好像都可以(黄学长之前好像还用vector卡过了这题) 所以这篇 ...

  2. 算法模板——平衡树Treap 2

    实现功能:同平衡树Treap 1(BZOJ3224 / tyvj1728) 这次的模板有了不少的改进,显然更加美观了,几乎每个部分都有了不少简化,尤其是删除部分,这个参照了hzwer神犇的写法,在此鸣 ...

  3. 【模板】平衡树——Treap和Splay

    二叉搜索树($BST$):一棵带权二叉树,满足左子树的权值均小于根节点的权值,右子树的权值均大于根节点的权值.且左右子树也分别是二叉搜索树.(如下) $BST$的作用:维护一个有序数列,支持插入$x$ ...

  4. hiho #1325 : 平衡树·Treap

    #1325 : 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? ...

  5. hiho一下103周 平衡树·Treap

    平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二 ...

  6. 【山东省选2008】郁闷的小J 平衡树Treap

    小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他面临着被解雇的危险,这也正是他所郁闷的.具体说来,书架由N ...

  7. Hihocoder 1325 平衡树·Treap(平衡树,Treap)

    Hihocoder 1325 平衡树·Treap(平衡树,Treap) Description 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二叉 ...

  8. HihoCoder 1325 平衡树·Treap

    HihoCoder 1325 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说 ...

  9. 普通平衡树Treap(含旋转)学习笔记

    浅谈普通平衡树Treap 平衡树,Treap=Tree+heap这是一个很形象的东西 我们要维护一棵树,它满足堆的性质和二叉查找树的性质(BST),这样的二叉树我们叫做平衡树 并且平衡树它的结构是接近 ...

随机推荐

  1. AcWing算法基础1.5

    前缀和与差分 两个内容都比较少,就放一起写了 设数组 a 的前 n 项为a1 , a2 , a3 ... an 前缀和数组就是每一项是a数组的前i项和,比如前缀和数组res,res[ 1 ] = a[ ...

  2. 《Typecript 入门教程》 1、类

    类 使用class + 类名 即可定义一个类,一个类中通常有3个成员:属性.构造函数.方法: 在类内部引用属性或方法事使用this调用,它表示我们访问的是类的成员. 我们使用new构造了Greeter ...

  3. Android json 数据解析

    1.json格式 2.json解析 3.gson解析 4.fastjson解析 一.Json格式 json一种轻量级的数据交换格式.在网络上传输交换数据一般用xml, json. 两种结构: 1)对象 ...

  4. jsp文件就是Servlet,可以在tomcat里进行查看

    D:\apache-tomcat-8.0.21\work\Catalina\localhost\springmvc2\org\apache\jsp\index_jsp.class

  5. cocos2d-x 不规则碰撞检测 【转载】

    原文:http://www.2cto.com/kf/201401/272331.html //判断有没有点到有材质的部分, p_point相对, CCSprite坐标  (p_point是相对 Spr ...

  6. <assert.h>

    Diagnostics 定义宏: void assert (scalar-expression); 若expression为0,则打印出错信息(类似Assertion failed: expressi ...

  7. TCP简要讲解

    TCP被称为面向连接.面向流,可靠的传输层协议.它与UDP最大的不同在于它是可靠性的,所以需要可靠传输的时候就需要用到TCP,如果需要快速传输则选择UDP. TCP的连接又称为3次握手.   1).客 ...

  8. 如何利用Flashback Query 恢复误删除的数据

    网上有很多关于数据回复的文章,这里整理一篇供大家参考,希望能帮助的大家! 推荐一家即时通讯云服务商:www.yun2win.com,功能包含im即时通讯.实时音视频.电子白板.屏幕共享的多种融合通讯云 ...

  9. [Windows Server 2008] 安装Apache+PHP+MySQL

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:Win2008 ...

  10. jquery 零碎笔记

    toggle使用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...