题意:维护两个栈,支持按插入时间合并 本来是左偏树的题,现在用treap水一下 把加入时间作为节点编号就可以很方便地实现了 ...
分类:
其他好文 时间:
2018-01-16 18:14:11
阅读次数:
242
哈希一下每一个字符串,对每一个哈希值$s$建一棵treap保存(所有哈希值等于$s$的字符串)的下标 每个节点维护一个标记表示这个节点在任何时点,它所处的treap的节点数的最大值(就是答案) 每次修改就暴力重新算哈希值,删除,插入后打一个标记 同一个字符串交换字符要特殊处理 ...
分类:
其他好文 时间:
2018-01-16 00:41:37
阅读次数:
150
一、简介 fhq treap 与一般的treap主要有3点不同 1、不用旋转 2、以merge和split为核心操作,通过它们的组合实现平衡树的所有操作 3、可以可持久化 二、核心操作 代码中val表示节点权值,pri表示节点的优先级,维护小根堆 1、split 将1个treap分裂为两个treap ...
分类:
其他好文 时间:
2018-01-15 17:37:28
阅读次数:
183
"题面传送门戳我" Treap计算前驱/后继。 直接搞两个Treap,一个维护宠物,一个维护收养人。 如果输入人,并且宠物Treap不为空,直接查询一下,然后删除。否则插入人Treap。 宠物同理。 但是在查询Treap是否为空的时候不能直接写 因为这个时候有可能Treap为空,就会RE。 所以要这 ...
分类:
其他好文 时间:
2018-01-15 00:29:26
阅读次数:
218
这道题还是Treap查找前驱/后继。 与 "HNOI2004 宠物收养场" 这题不同的地方在于这题的前驱和后继是可以等于其原数的。。。 开始我还以为只要每次查询之前的最小值,搞个堆就好了。。。 cpp include const int inf=0x3f3f3f3f; int N,Ans; stru ...
分类:
其他好文 时间:
2018-01-15 00:13:25
阅读次数:
158
#include using namespace std; const int N=100000; const int inf=2147483647; int cnt=0; int top=0; struct treap{ int ch[2],size,rd,val; }t[N+10]; int g... ...
分类:
其他好文 时间:
2018-01-14 22:49:46
阅读次数:
220
#include #include #include #include #include using namespace std; const int maxn=100100,inf=0x7fffffff; struct Treap { Treap* ch[2]; int key,val,size;... ...
分类:
其他好文 时间:
2018-01-14 17:39:56
阅读次数:
109
"题面传送门戳我" Treap计算前驱/后继。 直接搞两个Treap,一个维护宠物,一个维护收养人。 如果输入人,并且宠物Treap不为空,直接查询一下,然后删除。否则插入人Treap。 宠物同理。 但是在查询Treap是否为空的时候不能直接写 因为这个时候有可能Treap为空,就会RE。 所以要这 ...
分类:
其他好文 时间:
2018-01-14 00:52:33
阅读次数:
233
题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(排名定义为比当前数小的数的个数+1。若有多个相同的数,因输出最小的排名) 查询排名为x的数 求x的前驱(前驱定义为小于x,且最大的数) 输入输 ...
分类:
其他好文 时间:
2018-01-13 13:01:38
阅读次数:
167
这次我们来讲一讲Treap(splay以后再更) 平衡树是一种排序二叉树(或二叉搜索树),所以排序二叉树可以迅速地判断两个值的大小,当然操作肯定不止那么多(不然我们还学什么)。 而平衡树在排序二叉树的基础上主要是增加了一个优化:就是高度较为平衡,并可以动态平衡。 而今天要讲的treap就是一种动态平 ...
分类:
其他好文 时间:
2018-01-11 22:20:06
阅读次数:
183