FHQ Treap
天翼之城*
这个作者很懒,什么都没留下…
展开
-
Gym 100796 J. Narrow Bus —— Fhq_treap
This way题意:有三种操作:F 表示一个人到了队首B 表示一个人到了队尾O x 表示第x个进来的人找到距离他人最少的出口出去,同时这些挡路的人也出去,并且按顺序从另一个门进来,问你有多少人出去再进来了。题解:这种区间平移的题目很明显可以用fhq_treap做,但是每次怎么找到那个人的位置呢,可以在treap中维护每个人的父亲,找当前的人的排名的时候只往需要每次网上跳,如果当前点是父亲的右儿子,那么将父亲的左儿子的siz+1加到位置当中即可。#include<bits/stdc原创 2021-05-04 09:47:15 · 210 阅读 · 0 评论 -
Hdu 6873 Game —— FHQ Treap两种split同时使用
This way题意:有n个位置,每个位置上都有一些方块。每次有两种操作:1 x 询问位置x有多少个方块2 x y 将位置x y的方块向左移一格,并问你有多少个方块被推动所有方块受力学的影响题解:为了这道题特意去学了FHQ Treap很明显首先这道题是按照位置建树的,然后我们又需要支持以下操作:找到第x个位置左边的位置l使得min(a[l]~a[r])>=y那么我们就要先将树分成x左右边两个部分,然后再找到左边的树的最后小于y的位置并且将树分成两部分。这里就需要两个split然后原创 2020-09-04 19:31:13 · 293 阅读 · 0 评论 -
P3391 【模板】文艺平衡树 —— FHQ Treap 区间反转模板
This way题意:题解:存一个模板,先将l~r这个区间的treap分离出来,然后在根打上翻转标记,然后在merge,split,dfs等遍历树的时候先执行push_down,照旧还是用了并查集随机树的形状当然,在数据范围特别大的时候,并查集会导致空间范围扩大很多,于是可以用另一种写法,并且由于用了mt19937,效率也是比较高的:unordered_map<int,bool>vis;//int finds(int x){return fa.count(x)?fa[x]=fin原创 2020-09-03 16:17:12 · 341 阅读 · 0 评论 -
P3369 【模板】普通平衡树 —— FHQ Treap添加删除模板
This way题意:题解:被迫学习fhq treap好像它的功能很强大,并且代码比较短,能解决Splay,Bst,Treap所能解决的问题。在这里存个模板和一个大佬的博客:This way#include<bits/stdc++.h>using namespace std;const int N=1e5+5;int ch[N][3];// 0左孩子 1右孩子int val[N];// 每一个点的权值int pri[N];// 随机生成的附件权值int siz[N];原创 2020-09-02 16:36:13 · 166 阅读 · 0 评论