数据结构——平衡树
又又大柚纸
山东大学
展开
-
FHQ Treap 总结
【前言(一堆废话)】 目前 OI 竞赛中两大主流平衡树之一就是 FHQ Treap(另一个是 Splay)。 普通 BST 的中序遍历中,val 值构成一个单调递增的序列。 Treap 在 BST 的基础上,维护了一个 key 值,使其 val 满足 BST 性质,key 满足 Heap 性质。在维护 Heap 性质的同时,使 Treap 的树高期望是 log(n)。通常情况下,key 值是...原创 2018-07-05 23:28:54 · 6366 阅读 · 1 评论 -
[NOI2005]维护数列
【题目链接】 洛谷 P2042 BZOJ 1500【解析】 平衡树神仙题,debug 5h+。 思路到很简单,直接打标记维护。 FHQ Treap 要加上 O(n)建树才能 AC。【代码】#include<bits/stdc++.h>#define ll long longusing namespace std;const int inf = 1 &...原创 2018-07-05 23:37:10 · 221 阅读 · 0 评论 -
[CQOI2014]排序机械臂
【题目链接】 洛谷 P3165 BZOJ 3506【解析】 如果用 Splay 做,需要先排序,记录每个点被选中的顺序。 考虑到 FHQ Treap 的 Heap 性质,直接将结点的 key 值设为每个物品的高度。充分利用小根堆的性质,使每次被选中的结点一定是根结点。 当数据单调时,操作总复杂度为 O(n)。 但当数据单调递增时,暴力建树的时间复杂度就会退化为 O(n ^ 2)。 ...原创 2018-07-05 23:48:15 · 350 阅读 · 1 评论