随笔分类 - 数据结构-treap
摘要:紫薯例题
阅读全文
摘要:维护一个01序列,一共四种操作: 1.插入一个数 2.删除一个数 3.反转一个区间 4.查询两个后缀的LCP 用Splay或者Treap都可以做,维护哈希值,二分求LCP即可。 注意反转序列的时候序列的哈希值也会改变,因此需要维护正反两个哈希值,在交换左右儿子的时候顺便交换两个哈希值即可。 还有就是
阅读全文
摘要:题目链接 感谢Dream_Lolita的题解,经过无数次失败的尝试之后终于AC了... 线段树是维护区间信息的强大工具,但它的形态是固定的,只支持修改和删除操作,不支持插入、反转、复制、分裂合并等操作,而treap支持。这道题有个区间复制的操作,因此只能用treap来代替了。 注意几个坑点: 1.对
阅读全文
摘要:题目链接 文艺平衡树的可持久化版,可以使用treap实现。 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护结点以防越界,而treap一般不用) 可以分裂合并的treap一般称作无旋treap或FHQ-tre
阅读全文
摘要:题目链接 splay: 无旋treap(FHQ-treap):
阅读全文
摘要:题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~
阅读全文
摘要:题目链接 区间线段树套treap,空间复杂度O(nlogn),时间复杂度除了查询区间k大是O(log3n)以外都是O(log2n)的。 (据说线段树套线段树、树状数组套线段树也能过?)
阅读全文
摘要:题目链接 treap及树状数组模板题。 treap版: 树状数组版:
阅读全文
摘要:给定一个图,支持三种操作: 1.删除一条边 2.查询与x结点相连的第k大的结点 3.修改x结点的权值 解法:离线倒序操作,平衡树or线段树维护连通块中的所有结点信息,加个合并操作就行了。 感觉线段树要好写很多。 平衡树(Treap)版: 1 #include<bits/stdc++.h> 2 typ
阅读全文
摘要:题目链接 平衡树基础题,用于测试各种平衡树的性能(雾) treap: 1 #include<bits/stdc++.h> 2 typedef long long ll; 3 using namespace std; 4 struct Treap { 5 static const int N=1e5+
阅读全文