神仙数据结构——FHQ_Treap】的更多相关文章

$FHQ\_Treap$是平衡树的一种,它不仅支持几乎所有的平衡树的操作,而且实现特别简单,总共只有两个操作.这里来简单介绍一下. 基本操作 $FHQ\_Treap$和$Treap$一样是需要用随机值来维护树的形态的,但是$FHQ\_Treap$不需要旋转来调整形态,而是用$Split$和$Merge$来实现,也就是分离与合并,也就是这两种操作,完成了$FHQ\_Treap$的所有操作. 分离(Split) 把一棵平衡树分离成两棵,从而方便插入和删除.分离有两种做法,一种是按权值分离,一种是按子…
前言:昨天写NOIp2017队列,写+调辗转了3h+,不知道怎么的,就点进了一个神仙的链接,便在今日学习了神仙的fhq_treap. 简介:fhq_treap功能强大,支持splay支持的所有操作,代码简单,仅有两个核心函数\(merge\)和\(split\),更重要的是,它作为无旋的平衡树,是支持可持久化的. 正题:fhq_treap的实现 (0)树的域 对树的每个节点,我们维护 \(ch[2],siz,dat,val\) 分别为左右儿子,子树大小,BST性质的关键字,堆性质的关键字 其中堆…
Preface 可并堆,一个听起来很NB的数据结构,实际上比一般的堆就多了一个合并的操作. 考虑一般的堆合并时,当我们合并时只能暴力把一个堆里的元素一个一个插入另一个堆里,这样复杂度将达到\(\log(|A|)+\log(|B|)\),极限数据下显然是要T爆的. 所以我们考虑使用一种性价比最高的可并堆--左偏树,它的思想以及代码都挺简单而且效率也不错. 学习和参考自这里 What is Leftist Tree 左偏树,顾名思义就是像左偏的树,但是这样抽象的表述肯定是不符合我们学OI的人的背板子…
[题解]P4247 [清华集训]序列操作(线段树修改DP) 一道神仙数据结构(DP)题. 题目大意 给定你一个序列,会区间加和区间变相反数,要你支持查询一段区间内任意选择\(c\)个数乘起来的和.对19940417取膜. 咋做 我们这一类题看来有一个套路就是用线段树维护一个DP数组,然后线段树节点合并就用一点组合的技巧.. 设\(dp(i)\)表示在该区间里选择\(i\)个乘起来的和,考虑如何合并区间,很简单就是 \[ dp(i)=\sum_{j=0}dp'(j)dp''(i-j) \] 先考虑…
\(fhq-treap\)是个好东西啊!无旋转\(treap\)果然是好写,而且还是比较好理解的. 这种数据结构是由神犇fhq发明的.\(Think\ functional!\) fhq神犇说,函数式编程的一大特点就是,不修改,只定义.普通的平衡树,无论是treap还是splay,都需要进行旋转来维护树的平衡性. fhq神犇是通过可持久化线段树引入的.主席树其实就是一种函数式编程的产物.主席树中没有修改,只是每次新建了一条链(或者说新定义了一条链),而因为没有修改的优良性质,我们就可以使之与前面…
thupc & cts & apio & thusc 游记 (北京17日游记) Day 0 和隔壁校两人py了一下,六个人组了两队,(左哼哼)与(右哼哼),我和Camouflager以及everlasting构成了右哼哼. 然后打了一场thupc试机赛,不知道咋地就拿了本算法导论 Day 1 打了场thupc,没捞到钱 上来先开的M,然后发现自己$%7$忘转正了,然后就没拿到第一滴血,第一次提交时间:$0:2:37$,AC时间:$0:5:74$ ,+3 然后又开的$B$,又没拿到一…
SNOI2019场外VP记 教练突然说要考一场别省省选来测试水平...正好还没看题那就当VP咯w... Day 1 八点开题打 .vimrc. 先看了看题目名...一股莫名鬼畜感袭来... 怎么T1就是字符串鸭?HEOI 2019 D1T2的心理阴影为啥我会xjb套那么多东西上去啊QAQ...T2数论T3通信? 不好的感觉... 读了读T1, 神仙字符串排序, 溜了溜了 读了读T2, 模两个模数同余? 溜了溜了... 读了读T3. 诶这个东西怎么这么费用流啊? 看看数据范围...诶这个 \(n\…
RT.开坑. 10.1 开门黑23333. 放假回来稍困,而且感冒似乎愈加严重,导致我正常考试基本睁不开眼.一个小时勉强把题读懂,神志恍惚如斯. 看T2觉得估计又是各种推柿子堆定理的数学大题,写了个暴力就扔了.打暴力期间还差点写飞几个细节. 看T3,一眼可以马拉车骗暴力(废话题目都写了),但字符串长度才5000.这不随便写?玄学预处理剪枝+二位前缀和过了样例. 这个过程搁在平时大概一个小时左右,但鉴于今天隔三岔五就神游天外的精神状态,它耗费了两个多小时. T1可以贪心+二分?有几种贪心不知道选哪…
留坑.... 改完题再说吧. 留坑....最近考得什么鬼??模拟53T1 u(差分) 一道差分题????然而考场没有想到如何维护斜率上的差分,事后经miemeng和cyf的生(xuan)动(xue)讲解大概是懂了联想如何维护一个矩形的差分??假设我们区间修改为L1,R1,L2,R2,我们在L2+1,R2+1处+1,在L1,R1处+1,在L2+1,R1处-1,在L1,R2+1处-1,然后画图发现从左向右递推时我们维护的二维前缀和中有+1的部分恰好是区间修改的部分同理,我们现在维护出一个三角形首先考…
T1 prime 发现只需筛小于等于$mid(\sqrt r,k)$的质数,之后用这些质数筛掉区间内不合法的数即可. $code:$ 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 5 namespace IO{ 6 inline int read(){ 7 int x=0,f=1; char ch=getchar(); 8 while(ch<'0'||ch>'9'){ if(ch…