平衡树
Master.Yi
学习他人,提升自己;
提升自己,帮助他人。
展开
-
20200726 T3 树高【ETT(dfs序splay)维护同色边连通块】
题目描述n,m≤105n,m\le10^5n,m≤105,点的颜色范围为 [1,30][1,30][1,30]题目分析LCT可以维护黑白两色,黑点向父亲连边,实际连通块去掉根。但是整个连通块同时变色就不好整了。用ETT(就是dfs序splay)维护边连通块,这样改变颜色的时候只会改变这条边与上下的连通性。初始时看做同一种颜色,按dfs序建树,splay点标对应原树点标。一个边连通块为一棵以dfs序为关键字的 splay。上图中同一种颜色的箭头指向的节点在同一棵 splay 中。(link原创 2020-07-28 09:54:07 · 309 阅读 · 0 评论 -
20200727 T3 小w维护序列【平衡树预留插入位置+三维数点】
题目描述题目分析先考虑没有插入删除的情况。区间不同的数有个常见的 trick 是把它表示为二维的点 (prei,i)(pre_i,i)(prei,i),区间查询就变成数第一维在 [0,l−1][0,l-1][0,l−1],第二维在 [l,r][l,r][l,r] 的点。修改就是去掉原来的点,加入新的点,可以用 map 套 set 维护。(离散化好麻烦,复杂度也没区别)询问一也可以通过简单的处理把不同点之间的贡献分离开:那么这就是一个三维数点问题,cdq分治即可。(学到一个树状数组套树状数组原创 2020-07-27 21:26:54 · 241 阅读 · 0 评论 -
20200725 T3 sort【区间异或,区间排序,平衡树 + trie】
题目描述长度为 nnn 的序列,0≤ai<2320\le a_i<2^{32}0≤ai<232要求支持 区间与,区间或,区间异或,区间排序。输出最终的 aaa 序列。n,m≤105n,m\le10^5n,m≤105题目分析ai<16a_i<16ai<16 的时候可以线段树维护每种数的个数,排序的时候提取每种数然后区间赋值。看似是 log3log^3log3 实际上却跑得很快,(可能有些数没有;赋值时的pushup可以小常数memset)正解:平衡树维护原创 2020-07-26 16:40:20 · 531 阅读 · 1 评论 -
LOJ#2018. 「AHOI / HNOI2017」单旋【模拟单旋splay】
题目描述:题目分析:模拟当然不是指直接用splay暴力模拟啦。仔细盯着这个图,想像一下最小值被旋转到根,会发现相当于将最小值的右儿子接到了他的父亲下面,然后他变作根,原来的根变作他的右儿子,其他结构不变,所以我们只需要维护每个点的儿子和父亲以及根是谁,就可以O(1)实现旋转最值。再观察旋转过程中的深度变化,最小值的右儿子深度没有变,其他点深度+1,自己深度变为1。注意到Splay是一棵...原创 2019-12-25 22:21:12 · 269 阅读 · 0 评论 -
BZOJ3678 wangxz与OJ【Splay(缩点,split)/ 无旋Treap】
题目描述:维护一个初始有n个元素的序列(标记为1~n号元素),支持以下操作:0 p a b (0<=p<=当前序列元素个数) (a<=b) 在p位置和p+1位置之间插入整数:a,a+1,a+2,…,b-1,b。若p为0,插在序列最前面;1 a b (1<=a<=b<=当前序列元素个数) 删除a,a+1,a+2,…,b-1,b位置的元素;2 p (1<...原创 2019-10-21 17:07:27 · 166 阅读 · 0 评论 -
NOIP模拟赛20191012 T3 垃圾分类【平衡树】
题目描述:题目分析:太久没写平衡树了,照着题解都打了3h+。。。打完发现还挺棒棒哒。。。颈椎不疼了,手不酸了,一口气打Treap都不喘气儿了。。。存个代码作纪念。Code:#include<bits/stdc++.h>#define maxn 100005#define LL long longusing namespace std;const LL in...原创 2019-10-14 19:52:56 · 164 阅读 · 0 评论 -
BZOJ 3173: [Tjoi2013]最长上升子序列 【在线Treap/离线线段树】
题面:给定一个序列,初始为空。现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少?Input第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N)N<=100000题目分析:法一:Treap...原创 2019-03-29 20:32:16 · 154 阅读 · 0 评论 -
2017北京WC T3 神秘物质【平衡树】
题目描述:题目分析:max就是区间最大值-最小值min就是区间相邻两个数的差的最小值insert插入一个元素,merge删除两个、插入一个元素那么这似乎就是一道平衡树或者块状链表的裸题?只需要维护区间最大最小值,以及区间左右端点的值,和区间的max、min答案即可。然而考试的时候还是打崩了,最后写线段树暴力还错了只有20分QWQ。。(还是平衡树写的不熟练,没打过几次,很多地方...原创 2019-05-11 16:55:01 · 196 阅读 · 0 评论 -
普通平衡树(Splay,无旋Treap)
#include <bits/stdc++.h>#define maxn 500005using namespace std;int n,sz,root,fa[maxn],val[maxn],ch[maxn][2],siz[maxn],cnt[maxn];inline bool isc(int x){return ch[fa[x]][1]==x;}inline void up...原创 2019-10-21 23:02:00 · 420 阅读 · 0 评论