![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
平衡树
文章平均质量分 66
平衡树
黑夜和白天
过去无可挽回,未来可以改变
展开
-
Splay ---- 2018牛客多校第三场 区间翻转搞区间位移 或者 rope可持久化块状链表
题目链接题目大意:就是每次把牌堆中若干个连续的牌放到堆顶,问你最后牌的序列。解题思路:Splay 区间翻转的模板题:对于一个区间[1,2,3,4,5,6,7,8][1,2,3,4,5,6,7,8][1,2,3,4,5,6,7,8]你要把[3,4,5][3,4,5][3,4,5]拿到前面去我们可以这么搞先把[1−5][1-5][1−5]翻转·一下[5,4,3,2,1,6,7,8][5,4,3,2,1,6,7,8][5,4,3,2,1,6,7,8]然后我们发现只要把[5,4,3][5,4原创 2021-10-04 10:53:02 · 127 阅读 · 0 评论 -
splay + 线段树 ---- P3765总统选举 [带修改的动态区间众数 摩尔投票+n棵splay]
题目链接题目大意:解题思路:1.摩尔投票法:题意是找n个数内出现次数大于n/2的数 保证存在这个数用的方法叫做摩尔投票法首先我们注意到这样一个现象: 在任何数组中,出现次数大于该数组长度一半的值只能有一个。摩尔投票法的基本思想很简单,在每一轮投票过程中,从数组中找出一对不同的元素,将其从数组中删除。这样不断的删除直到无法再进行投票,如果数组为空,则没有任何元素出现的次数超过该数组长度的一半。如果只存在一种元素,那么这个元素则可能为目标元素。有了这个前置技能以后 这道原创 2021-09-06 14:43:22 · 623 阅读 · 0 评论 -
Splay ---- 区间翻转 区间最大值 区间加 P4146 序列终结者
题目链接题目大意:解题思路:这是一道很入门的Splay的题目但是第一次写有很多坑点首先是maxmaxmax值的更新:就是因为这个点的最小值是会出现负数负数的,当你左右儿子有一个没有的话,那么更新就不能用它因为它的maxmaxmax是0怎么都比你的负数大,但是这个是无效的结果,除非你在T[0].max=−INFT[0].max =-INFT[0].max=−INF交换两个子树一定要交换两个子树,不能只交换值,因为每个点保存的值是取决于你在树上面进行中序遍历的位置#include &l原创 2021-08-21 10:13:12 · 171 阅读 · 0 评论 -
Splay ---- 文艺平衡树区间翻转的建树模式
Splay 的区间操作这个splay已经不是平常的权值splay了, 每个节点维护区间的位置取决于它在树里面的位置首先这课splay中序遍历的结果就是你维护的整个区间的数值!!注意这个中序遍历很重要为了操作区间[l,r][l,r][l,r]我们把l−1l-1l−1转到根节点,把r+1r+1r+1转到根节点的左儿子,那么rrr的左儿子里面的数值就是我们要的[l,r][l,r][l,r]区间,做个lazylazylazy标记就可以实现区间翻转,实际上就是一直交换左右儿子这课树是没有左儿子权值小过右儿子原创 2021-08-19 16:06:39 · 184 阅读 · 0 评论 -
Splay模板(yyd)含所有的基础操作
#include <bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3f#define ls(x) T[x].ch[0]#define rs(x) T[x].ch[1]#define fa(x) T[x].fa#define root T[0].ch[1]const int maxn = 1e5 + 10;struct node { int fa;//父节点是谁? int ch[2];//左右儿子原创 2021-07-15 15:56:36 · 170 阅读 · 0 评论