————————————————————————————————————————————————————————- 依然是部分分练习,学习了treap后再来做 没想到因为longlong搞死,感觉自己好有毅力 一开始想到了50pt中q很小,第一反应写vector维护,结果写了一半弄晕了,想从题解中找 ...
分类:
其他好文 时间:
2019-08-20 22:26:07
阅读次数:
82
空间消耗非常玄学,有多大开多大就完事了。其实是因为单次操作可能会有数次Merge和Split操作,按照下面的版本的话Merge和Split都进行复制,所以一次操作可能复制了4个版本。 四个函数式查询,然后Merge的时候拷贝对应的xy子树,Split的时候拷贝p树。事实上,Merge和Split总是 ...
分类:
其他好文 时间:
2019-08-10 09:39:06
阅读次数:
62
平衡树24题(更新中…) 前言: 我写的平衡树题里不是用Treap解决的,就是用Fhq Treap写的,还有极少数是用Splay写的。 说说这几个树的区别与优劣: Treap是编码相对来说最容易的,但是由于它的结构不能改变,以致许多题目不能实现,区间操作也不行。一般来说,Treap可以打裸题,或者作 ...
分类:
其他好文 时间:
2019-08-09 23:32:41
阅读次数:
120
Treap 普通二叉搜索树(BST) 对于任一棵子树,根节点权值大于左子树所有结点的权值,小于右子树所有结点权值 1. 结点结构体&初始化函数 3. 右旋 4. 左旋 5. 插入 与BST大致相同,只是在把val插入到左子树或右子树时,要根据dat来维护Treap,即通过左旋或右旋调整使得堆性质成立 ...
分类:
其他好文 时间:
2019-08-08 20:59:36
阅读次数:
91
前言部分 splay是个什么东西呢? 它就是个平衡树,支持以下操作 这些操作还可以用treap,替罪羊树,红黑树,multiset balabala(好像混进去什么奇怪的东西) 这里就只说一下splay(其他的窝不会)(splay窝也不会) 先来几个变量和一些辅助函数: root:当前平衡树的根是那 ...
分类:
其他好文 时间:
2019-07-23 11:35:31
阅读次数:
125
"题目链接" 问题分析 参照数据范围,我们需要一个能够在$O(n\log n)$复杂度内维护有序数列的数据结构。那么平衡树是很好的选择。参考程序中使用带旋Treap。 参考程序 c pragma GCC optimize( 3 ) include include include namespace ...
分类:
其他好文 时间:
2019-07-19 21:11:52
阅读次数:
113
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护的标准,而处理区间问题时,维护平衡树的应该是每个位置的下标,所以平衡树中序遍历时应该是当前区间的样子 ...
分类:
其他好文 时间:
2019-07-09 21:00:36
阅读次数:
142
定义 所谓笛卡尔树,就是将给定的$n$个二元组$(key,val)$建成一棵树。使得如果只关注$key$,那么这是一个堆。如果只关注$val$,那么这是一棵二叉搜索树。 有没有很像$treap$。 与$treap$不同的是,笛卡尔树是可以在$O(n)$时间内构建的。而且如果给定key,那么$trea ...
分类:
其他好文 时间:
2019-06-06 00:29:58
阅读次数:
100
~~震惊,我竟然写出了fhq Treap~~ 先%fhq大佬 然后%zxy大佬 节点定义 特有操作 fhq Treap也被叫做无旋Treap,它通过分裂与合并来维持平衡和堆的性质。 按值分裂 将树分成x,y两颗树,其中x中的元素都小于等于w,y中的元素都大于w。 按地址传参,调用后x,y为新树的根。 ...
分类:
其他好文 时间:
2019-05-13 01:01:29
阅读次数:
177
今天翻了翻其他大佬的博客,发现自己有些。。。颓废。。。 有必要洗心革面,好好学习 序:正常的BST有可能退化,成为链,大大降低效率,所以有很多方法来保持左右size的平衡,本文将简单介绍Treap,Splay,替罪羊,FHQ Treap; 另:代码都是普通平衡树 1.Treap 树堆,在数据结构中也 ...
分类:
其他好文 时间:
2019-05-06 11:48:36
阅读次数:
111