【学习】fhq-treap】的更多相关文章

序 今天心血来潮,来学习一下fhq treap(其实原因是本校有个OIer名叫fh,当然不是我) 简介 fhq treap 学名好像是"非旋转式treap及可持久化"...听上去怪怪的.其实就是可以代替LCT.BST等等码量很高的东东. 定义 struct node{ int son[2],val,rand_val,sz;//很好理解,从左到右依次为:左右儿子编号,权值,随机权值(用处后面会讲),此节点下(包括此节点)共有多少个节点 }tr[N]; 操作 最基本的操作 其实都不应该叫做…
.....好吧....最后一篇学习笔记的flag它倒了..... 好吧,这篇笔记也鸽了好久好久了... 比赛前刷模板,才想着还是补个坑吧... FHQ,这个神仙(范浩强大佬),发明了这个神仙的数据结构, 首先,本篇博客使用洛谷普通平衡树为背景,即 查找前驱 查找后记 查找kth的数 查找k的排名 插入一个数 删除一个数 FHQ treap,是一个treap,它还是和treap一样,是tree+heap,所以它也有一个键值维护堆的性质. 它可以干任何treap和Splay能干的事. 它的实现主要由…
话说天下大事,就像fhq treap —— 分久必合,合久必分 简单讲一讲.非旋treap主要依靠分裂和合并来实现操作.(递归,不维护fa不维护cnt) 合并的前提是两棵树的权值满足一边的最大的比另一边最小的还小.因此时合并时只需要维护键值的堆性质即可.这样每一次比较根节点,如果x比y小那么y直接接到x的右子树即可(需要满足权值的平衡树性质):否则的话只需要反过来,把x接到y的左子树上.merge函数返回的值应当是合并完后的根节点. 分裂分为两种,排名和权值.然而我认为它们本质上是一样的.对于权…
FHQ Treap FHQ Treap (%%%发明者范浩强年年NOI金牌)是一种神奇的数据结构,也叫非旋Treap,它不像Treap zig zag搞不清楚(所以叫非旋嘛),也不像Splay完全看不懂,而且它能完成Treap与Splay能完成的所有事,代码短,理解也容易. 基本操作 FHQ Treap和Treap很像,都是给每个节点一个随机的权值,使它满足堆的性质.建议先了解Treap(没必要实现,懂得原理即可).不过,如果有两个节点值相同,FHQ Treap不会用一个数组cnt记录个数,而是…
众所周知 Fhq Treap 是 fhq 神仙研究出来的平衡树- 具体实现 每个点实现一个 \(\text{rnd}\) 表示 rand 的值 为什么要 rand 呢 是为了保证树高为 \(\log n\) 从而保证复杂度- FHQ Treap的核心操作是split和merge,其他的操作均以这两个操作为基础进行. 下面所述操作的数据如下所示: int rt = 0 , cnt = 0 , a[N] , sz[N] , rnd[N] , ch[N][2] ; #define ls(x) ch[x…
新学习了fhq treap,厉害了 先贴个神犇的版, from memphis /* Treap[Merge,Split] by Memphis */ #include<cstdio> #include<algorithm> #include<cstring> #include<ctime> using namespace std; #define maxn 2000005 #define rep(i,x,y) for(int i=x;i<=y;++i…
Preface 关于那些比较基础的平衡树我想我之前已经介绍的已经挺多了. 但是像Treap,Splay这样的旋转平衡树码亮太大,而像替罪羊树这样的重量平衡树却没有什么实际意义. 然而类似于SBT,AVL,RBT这些高级的乱搞平衡树无论时思想还是码量都让人难以接受. 而且在许多复杂的问题中需要维护区间,但是Splay的维护区间对于我这个蒟蒻来说实在是学不会. 许多的原因综合起来,在加上CJJ dalao的偶然安利,我便结识了神奇的FHQ Treap,一眼本命平衡树的感觉. 所以NOIP结束以后立马…
今天翻了翻其他大佬的博客,发现自己有些...颓废... 有必要洗心革面,好好学习 序:正常的BST有可能退化,成为链,大大降低效率,所以有很多方法来保持左右size的平衡,本文将简单介绍Treap,Splay,替罪羊,FHQ Treap: 另:代码都是普通平衡树 1.Treap 树堆,在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树.其基本操作的期望时间复杂度为O(logn).相对于其他的平衡二叉搜索树,Treap的特点是实现简单,…
1.BST二叉搜索树 顾名思义,它是一棵二叉树. 它满足一个性质:每一个节点的权值大于它的左儿子,小于它的右儿子. 当然不只上面那两种树的结构. 那么根据性质,可以得到该节点左子树里的所有值都比它小,右子树的都比它大. 而平衡树都是基于BST的. 为什么叫做平衡树?对于数的操作可能会破坏BST的性质,这时会进行另外的操作,保持它的性质. 为什么要用BST?对于一棵BST,每一次的操作,都相当于进行一次二分,时间复杂度可以降到log级别. 这里写的是两个常用的平衡树. 2.Splay splay树…
Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题.经济管理学上定义了一种最小波动值来衡量这种情况: 该天的最小波动值 当最小波动值越大…