随笔分类 - OI-数据结构
摘要:普通平衡树 我们这里着重介绍一下 。 首先我们会用一个结构体存下平衡树的节点。这道题中需要存左右儿子编号,优先度(随机的一个值),点上存的数是多少,子树中有多少数。我们记作 。 接下来我们一个一个讲解函数:
阅读全文
摘要:左偏树 可以发现左偏树的别名叫可并堆,就是可合并的堆。于是我们的主要操作便是合并。 我们定义外节点为左儿子或右儿子至少有一个为空的节点。我们定义外节点的 为 ,其余点的 为到其子树内最近的外节点的距离加上 。 左偏树是一棵二叉树,首先其具有堆的
阅读全文
摘要:可持久化线段树 注意,它的全称为可持久化权值线段树。 例题 :可持久化线段树 首先我们考虑几个暴力: 对于每次询问,找出区间中的所有数,直接排序求第 小。这样做的时间复杂度为 的。 对于每次询问,建出一棵权值线段树,然后权值线段树上二分查找即可。
阅读全文
摘要:扫描线 经典问题之求矩形面积并,可以使用线段树和扫描线。 比方说我们要对这俩东西求面积并,我们简单分割一下。 然后扫描线就是,从最下面一条绿线向上扫过去,遇到下底边则加上这个矩形,遇到上底边则减去这个矩形。 回到这道题,发现给了我们矩形的两个角,那么上底边和下底边是好求的。 发现这样对图形分层之后,
阅读全文
摘要:普通莫队 DQUERY - D-query 先想一下最朴素的暴力怎么写。显然可以用一个 数组记录每种元素的出现次数,然后如果这种元素是第一次出现,则增加答案,时间复杂度 。 然后考虑如果如何用一个已经求出来答案的询问推出另外一个询问的答案。 显然我们要增加一部分数和
阅读全文
摘要:权值线段树 线段树在这里作为前置知识,我们就不说了,而且权值线段树也不是核心内容,不会大篇幅讲。 首先,权值线段树在维护什么?维护的是桶。 然后,权值线段树有什么用?可以求一些序列的第 大之类的问题。 于是我们放个板子题。 第 k 小整数 简单题,直接看代码和注释就行,当然也可以使用线性
阅读全文
摘要:基本思想 放在前面:该数据结构的时间复杂度很玄学,一般用于骗分,当然不排除作为正解的可能性。 下面简称该数据结构为 . 是一种可以高效处理 维空间信息的数据结构。换句话说,他是维护 维空间 个点的一种平衡树。 一般在算法竞赛中,我们需
阅读全文
摘要:笛卡尔树基本概念 笛卡尔树是基于一个静态序列 的,根据这个序列 ,我们可以构造出对应的笛卡尔树。 笛卡尔树有三点要求需要满足: 笛卡尔树是二叉树。 笛卡尔树的编号的中序遍历为 ,权值中序遍历为 。 笛卡尔树的权值满足大根堆或者小根堆的性质。 这里
阅读全文
摘要:吉司机线段树 为了方便说板子,这里直接把板子题放上去讲了。 线段树 3 简单说一下 个操作都在干什么: 区间加一个数。 区间和一个数取最小值。 区间求和。 区间求最大值。 区间求历史最大值。 好了,前 个操作如果单独拉出来出成一道题,显然是好做的,于是我们的难点就是最后一个操
阅读全文
摘要:李超线段树 李超线段树 发现要维护的问题十分难做,所以我们要引入李超线段树。 我们发现,如果在一个区间内,一条线段的整体在另一条线段上方,那么这条线段一定更优,我们称之为最优线段。但是如果并不是这样,应该如何做呢? 这里给出线段为一个区间内的最优线段的条件: 线段的定义域覆盖了整个区间。 线段在区间
阅读全文
摘要:前置芝士:动态开点线段树。 先放一个板子题:Legacy。 题意放一下: 有 个点, 次操作: 从 到 连一条权值 的有向边。 从 向编号在区间 内的每个点连一条边权为 的有向边。 从编号在区间 \
阅读全文