平衡树
crazy morning
去西之西处,驾驭长风
展开
-
P3224 [HNOI2012]永无乡
题目题目思路思路很好想,FHQtreap+启发式合并,但就是……恶心的代码,因为合并需要把所有拆出来再和在中间……code:#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<iostream>#include<cstdlib>using namespace std;inline int read(){原创 2021-08-18 21:54:00 · 62 阅读 · 0 评论 -
P2596 [ZJOI2006]书架
题目题目思路很恶心的FHQTreap,话说出题人好像是打算考Splay来着?没事,反正出题人可能卡不了FHQTreap连权值线段树,文艺平衡树,普通Treap都能过,这题写FHQ已经很给出题人面子了……相比普通FHQTreap不能说毫无变化,至少也是一模一样……唯一一个稍微有点用的思想就是用个map(数组也一样)来记录编号与平衡树里节点编号对应关系。然后这题需要一个求rank的函数总体来说就是一堆封装程度极高的玩意拼在一起……记个知识:函数参数可以在定义时设初始值,效果未知,这里也是随便乱原创 2021-08-04 20:11:23 · 89 阅读 · 0 评论 -
P3165 [CQOI2014]排序机械臂
题目题目思路FHQTreap不能处理既要权值分裂,又要排名分裂的情况,所以我们按排名分裂,先预处理出排名,接下来权值就不重要了code:#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<iostream>#include<cstdlib>using namespace std;inline int read()原创 2021-07-20 21:14:52 · 74 阅读 · 0 评论 -
P2042 [NOI2005] 维护数列
题目题目思路这题比文艺平衡树还板子……直接FHQ啊,就是要加一个垃圾栈(你没有看错,我也没有打错,就是垃圾栈来对空间重复利用code:#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<iostream>#include<cstdlib>using namespace std;inline long long原创 2021-07-20 16:44:14 · 61 阅读 · 0 评论 -
P3391 【模板】文艺平衡树
题目题目思路FHQtreap板子,直接上代码code:#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<iostream>#include<cstdlib>using namespace std;inline int read(){ int ret,c,f=1; while (((c=getc原创 2021-07-20 11:33:11 · 65 阅读 · 0 评论 -
P2286 [HNOI2004]宠物收养场
题目题目思路建2棵平衡树,一个存宠物,一个存顾客,然后看数量,随时切换就好了。struct套struct是个好东西code:#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using namespace std;long long n,inf=0x7fffffff;struct Treap{ long long l,r;//左右子编号 lo原创 2021-03-18 15:43:18 · 147 阅读 · 0 评论 -
P2234 [HNOI2002]营业额统计
题目题目思路一道比板子更水的板子。只需要查询前驱和后缀。code:#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using namespace std;struct Treap{ long long l,r;//左右子编号 long long v,d;//v权值(真),d随机值(旋转用) long long cnt,size;//cnt原创 2021-03-18 15:40:39 · 45 阅读 · 0 评论 -
P1486 [NOI2004] 郁闷的出纳员
题目题目思路如果我们不删除且不设置下界的话就是一道平衡树板子了,那么难点其实就在删除和设置下界。看了几篇题解,大多是2种方法:插入当前下界,把其和比其小的转移到左子树,然后删除左子树。通过枚举前缀的方式一个一个删除。2种方法各有优劣,前者浪费空间大,后者花费时间较长。作为在csp中空间爆掉的选手,我个人建议用后者。其次就是改下界了,那么我们可以用这样的思路:每个人都加了工资,相当于下界减少了,反之相同。所以使用一个和来记录增加工资量。但是会发现后来的人没加工资,所以我们预先把他们原创 2021-03-13 22:02:16 · 91 阅读 · 0 评论 -
P6136 【模板】普通平衡树(数据加强版)
题目题目思路过了板子再做加强岂不妙哉注意,本题要开long long.出题人:本题输入数据较大,请使用较快的读入方式。做题人:Treap+cin可AC,弄啥嘞AC记录(请出题人加强数据)code:#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using namespace std;struct Treap{ long long l,r;/原创 2021-03-10 20:08:55 · 99 阅读 · 0 评论 -
P3369 【模板】普通平衡树
题目题目思路因为Erase函数没加&,改了3H……垂死病中惊坐起,小丑竟是我自己code:#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using namespace std;struct Treap{ int l,r;//左右子编号 int v,d;//v权值(真),d随机值(旋转用) int cnt,size;//cnt重复原创 2021-03-10 17:06:21 · 135 阅读 · 0 评论