HihoCoder 1325 平衡树·Treap

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似。

小Hi:你说的是哪两个啊?

小Ho:就是二叉排序树和堆啊,你看这两种数据结构都是构造了一个二叉树,一个节点有一个父亲和两个儿子。 如果用1..n的数组来存储的话,对于二叉树上的一个编号为k的节点,其父亲节点刚好是k/2。并且它的两个儿子节点分别为k*2和k*2+1,计算起来非常方便呢。

小Hi:没错,但是小Hi你知道有一种办法可以把堆和二叉搜索树合并起来,成为一个新的数据结构么?

小Ho:这我倒没想过。不过二叉搜索树满足左子树<根节点<右子树,而堆是满足根节点小于等于(或大于等于)左右儿子。这两种性质是冲突的啊?

小Hi:恩,你说的没错,这两种性质的确是冲突的。

小Ho:那你说的合并是怎么做到的?

小Hi:当然有办法了,其实它是这样的....

提示:Tree+Heap?

输入

第1行:1个正整数n,表示操作数量,10≤n≤100,000

第2..n+1行:每行1个字母c和1个整数k:

若c为'I',表示插入一个数字k到树中,-1,000,000,000≤k≤1,000,000,000

若c为'Q',表示询问树中不超过k的最大数字

输出

若干行:每行1个整数,表示针对询问的回答,保证一定有合法的解

样例输入
5
I 3
I 2
Q 3
I 5
Q 4
样例输出
3
3
分析:无论从哪方面来看都是平衡树Treap的裸题,但是张昆玮的PPT《统计的力量》告诉我们,不强制在线的名次树可以用线段树配合离散化解决(这个PPT对线段树初学者很有帮助,不仅在于zkw线段树常数小,更重要的是zkw分析了线段树与其他主流数据结构的关系与应用)。核心思想是对计数数组维护前缀和,求rank就是前缀和,求第k小就是与名次树类似的自顶向下搜索(k<=左子树结点数就向左,否则向右),更新是单点更新。是不是看起来比Treap都容易?以后写名次树完全用不着码平衡树了。
这种写法主要弊端是必须离线(类似主席树),如果题目强制在线就没有招了(不过没有人会想到用强制在线卡一道平衡树裸题吧?)。写的时候注意不要与平衡树混淆(还是很容易混淆的),比如维护sum要与平衡树中维护size的情况分开。
这份程序中没有使用zkw的非递归自底向上式的线段树写法,有时间我会补上。
代码(递归式)
UPD:懒得补了,因为想要使用非递归式写法,要求这棵树是满二叉树,很烦我就不写了(P.S.递归式线段树比Treap大概快了100ms,还算满意,毕竟编程复杂度小了不少)。

最新文章

  1. ADB server didn&#39;t ACK
  2. Source Insight 基本使用(1)-使用Source Insight查看Android Framework 源码
  3. bzoj2396: 神奇的矩阵
  4. juggle
  5. Oracle RAC OCR 和 VotingDisk 的备份与恢复
  6. datagridview bindingsource
  7. java list基本用法
  8. MyEclipse解决SVN同步冲突问题conflict in the working copy obstructs the current operation
  9. Docker 镜像使用
  10. P3979 遥远的国度
  11. VTP
  12. 【转】Java代码操作Redis的sentinel和Redis的集群Cluster操作
  13. webRTC结合canvas截图
  14. Flutter框架概览
  15. c函数声明前加typedef是什么情况
  16. 再次理解js中的call函数
  17. Hello QT(译)
  18. odoo 的字段。orm对象
  19. 【转载】完全版线段树 by notonlysuccess大牛
  20. 第五篇:使用无缓冲IO函数读写文件

热门文章

  1. 支持各种特殊字符的 CSV 解析类 (.net 实现)(C#读写CSV文件)
  2. Docker(五):Docker高级网络配置
  3. HTTPS从认识到线上实战全记录
  4. Java企业微信开发_11_异常:java.net.UnknownHostException: qyapi.weixin.qq.com
  5. NoFragment重大bug
  6. 房上的猫:while循环与do-while循环,debug的调试运用
  7. redis 写入的时候报错
  8. 带以太网的MicroPython开发板:TPYBoardv201温湿度上传实例
  9. HttpRuntime.Cache .Net自带的缓存类
  10. Cenots更换YUM源的问题