![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
平衡树
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
-
「JOISC 2020 Day1」扫除 (分治)(线段树)(平衡树)
传送门首先考虑 Subtask 3Subtask\ 3Subtask 3,这些点是单调的,所以用线段树维护区间赋值Subtask 4Subtask\ 4Subtask 4,没有插入,考虑如果一个点被推到一个地方,那么它与其它的相对顺序就不会变,所以我们用动态开点线段树来找点,用一个平衡树来维护被推的点,平衡树支持插入,区间赋值对于有插入的情...原创 2020-03-25 23:54:36 · 372 阅读 · 0 评论 -
[WC2014] 紫荆花之恋 (点分树)(替罪羊树)(点分树定期重构)
关于求答案:对于每一个分治中心 ggg,求经过它的点对 (u,v)(u,v)(u,v) 的贡献需要 dis(u,g)+dis(v,g)≤ru+rvdis(u,g)+dis(v,g)\le r_u+r_vdis(u,g)+dis(v,g)≤ru+rv也就是 dis(u,g)−ru≤rv−dis(v,g)dis(u,g)-r_u\le r_v-dis(v,g)dis(u,g)−ru≤rv...原创 2019-10-28 16:15:12 · 182 阅读 · 0 评论 -
fhq-Treap 学习笔记
fhq-Treap 及非旋Treap, 类似普通的Treap, 每个点有一个val(值), 和rank(随记出来的), 期望树高log核心操作有如下 Build -> O(n), Split -> O(log), Merge -> O(log)当然, Build 也可以一个一个插入, 也不是很慢Build先将树按值排序, 然后一个一个加, 用栈维护最右链, 每次直...原创 2019-06-19 20:46:55 · 231 阅读 · 0 评论 -
Buy Tickets[Splay]
传送门Splay直接维护就可以了#include<iostream>#include<cstdio>#define N 200005#define lc t[x].ch[0]#define rc t[x].ch[1]using namespace std;struct Splay{int ch[2],fa,val,size;}t[N];int n,r...原创 2018-11-07 22:05:35 · 180 阅读 · 0 评论 -
序列终结者[Splay]
传送门题意:区间加,区间翻转,区间最大值(直接打tag就可以了)第一次背着打模板...注意几个点---- 提取L--R时,不能直接Splay(l-1) ... 我们要找到l-1对应的节点,也就是找第l-1大,然后再Splay找第K大及其余操作时,每次都要Pushdown发正Pushdown也没多慢,多push几次保险嘛另外,前后多差一个,维护的序列是2--n+1 (因为...原创 2018-10-31 23:33:39 · 166 阅读 · 0 评论 -
永无乡[Splay启发式合并]
题目描述永无乡包含 nn 座岛,编号从 1 到 n ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛到达另一个岛。如果从岛 a 出发经过若干座(含0 座)桥可以 到达岛 b ,则称岛 a 和岛 b 是连通的。现在有两种操作:B x y 表示在岛 x 与岛 y 之间修建一座新桥。Q x k ...原创 2018-10-14 16:14:33 · 169 阅读 · 0 评论 -
维护序列[Splay]
题目描述请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格)输入格式:输入文件的第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M 表示要进行的操作数目。 第 2 行包含 N 个数字,描述初始时的数列。 以下 M 行,每行一条命令,格式参见问题描述中的表格输出格式:对于输入数据中的 GET-S...原创 2018-10-14 11:39:28 · 455 阅读 · 0 评论 -
一个写的不错的Splay模板
#include<bits/stdc++.h>#define N 100005using namespace std;struct Node{ int ch[2],val,fa,size,cnt;}t[N];int root,tot,n,ans;int read(){ int cnt=0,f=1;char ch=0; while(!isdigit(ch)...原创 2018-10-07 13:32:54 · 236 阅读 · 0 评论 -
纳闷的出纳员
题目描述OIER公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。工资的频繁调整很让员工反感,尤其是集体扣除...原创 2018-10-04 23:08:59 · 416 阅读 · 0 评论 -
营业额统计[Treap]
题目描述Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管...原创 2018-10-04 23:04:05 · 167 阅读 · 0 评论 -
文艺平衡树[区间翻转]
题目描述您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1输入输出格式输入格式: 第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2,⋯n−1,n) m表示翻转操作次数接下来m行每行两个数 [l,r][数据保证1≤l≤r≤n输出...原创 2018-10-04 23:02:20 · 266 阅读 · 0 评论 -
宠物收养所[Treap]
题目描述凡凡开了一间宠物收养场。收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养场的宠物一个特点值。这样他就能够很方便的处理整个领养宠物的过程了,宠物收养场总是会有两种情况发生:被遗弃的宠...原创 2018-10-04 22:58:30 · 519 阅读 · 0 评论 -
书架[Splay]
题目描述小T有一个很大的书柜。这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列。她用1到n的正整数给每本书都编了号。小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本。由于这些书太有吸引力了,所以她看完后常常会忘记原来是放在书柜的什么位置。不过小T的记忆力是非常好的,所以每次放书的时候至少能够将那本书放在拿出来时的位置附近,比如说她拿的时候这本书上面有X本书,那么放回去...原创 2018-10-11 21:46:35 · 117 阅读 · 0 评论 -
分步讲解平衡树--最强版
今天想告诉大家Winner Never Quit我从上午11点写到晚上9点 靠的就是这句话让我深刻理解了平衡树那我们开始吧二叉排序树 二叉排序树是一种很万能的东西,它通过使二叉树的中序遍历为升序来维护一个可插入删除和查询许多信息的序列。具体地,对于插入操作,从根节点开始搜索,对于比根节点小的数,递归它的左子树,对于比根节点大的数,递归它的右子树,知道搜索到一个空位就把这个数塞...原创 2018-08-22 21:14:53 · 1335 阅读 · 1 评论 -
关于Splay旋转的一些理解
看旋转看了好久...Splay主要有三种旋转zig,zig-zig,zig-zagzig:当目标节点是根节点的左子节点或右子节点时,进行一次单旋转,将目标节点调整到根节点的位置。 zig-zigx是它爸的什么儿子,它爸就是它爷爷的什么儿子(它们的线是直的)zig-zagx是它爸什么儿子,它爸就不是它爷爷什么儿子(它们是弯的) 注意这里的zig(x)...原创 2018-08-26 10:54:03 · 1750 阅读 · 4 评论 -
Splay的一些操作
查找find操作从根节点开始,左侧都比他小,右侧都比他大, 所以只需要相应的往左/右递归 如果当前位置的val已经是要查找的数 那么直接把他Splay到根节点,方便接下来的操作 类似于二分查找, 所以时间复杂度O(logn)inline void find(int x)//查找x的位置,并将其旋转到根节点{ int u=root; if(!u)return;...转载 2018-08-26 10:57:09 · 127 阅读 · 0 评论 -
Treap总结与模板
Treap支持插入,删除,区间第k大,一个数的前驱,后继...核心的思想:每个节点有一个key表示该节点的值和一个priority 表示当前节点的优先值我们的树既满足二叉查找树的左小右大右满足堆的上小下大这样一来,均摊复杂度可以达到logn在插入时,只要不满足堆的性质就旋转在删除时,我们找到要删除的点,并将它旋转到叶子节点在旋转时也要注意优先值 核心...原创 2018-10-03 13:27:47 · 132 阅读 · 0 评论