随笔分类 - 数据结构
摘要:您将在这里见到最垃圾的扫描线写法. 扫描线当然不只是用于做下面的两个问题,但是先写这些。 2026 upd:现在好像这个维护手法是主流,没人写标记永久化了。 1. 面积 扫描线本身还是很好理解的. 偷一张图 (图源 OI-wiki) 下面的 \(cnt\) 表示对应区域被矩形覆盖的次数. 容易发现只
阅读全文
摘要:2026 upd:发现了 这篇题解,写的比我好。 不知道什么时候看 这个 受到的启发。 娱乐项目,不必认真对待。这个做法对问题的要求太高了,难一点的问题没法这么做。 众所周知, 正常的分块做单点加区间求和, 时间复杂度高达 \(O(1)-O(n^{1/2})\) (修改-询问). 这太慢了,于是考虑
阅读全文
摘要:luogu日报 LA 模板题解 一个能把 LCA,RMQ 和 LA 问题做到线性的奇怪技巧。 大概就是分块,块的大小为 \(O(\log n)\),然后整块用原算法,块内可以直接枚举所有可能情况(反正块的大小只有对数级)。 在某场初赛之后这个技巧应该说是普及了。 1. LCA 首先我们按照众所周知的
阅读全文
摘要:笛卡尔树就是每个结点有两个值 val 和 key,其中 val 满足 BST 的性质而 key 满足堆的性质。treap 就是一棵笛卡尔树。 可以证明给定 val 和 key 的前提下笛卡尔树的形态是唯一的。 很明显借助于平衡树的知识我们能 $O(n\log n)$ 进行构建。 但是,当给定的元素已
阅读全文
摘要:口胡。 1. 旋转treap treap 也可以用旋转来维护。 插入操作: 这是显然的,找到位置插入以后,把结点一路转上去,直到父亲结点的 key 值小于当前结点的 key 值就行了。 容易发现这样旋转没有破坏堆的性质。 删除操作: 如果只有一个儿子那就把儿子转上来,然后到子树进行操作。两个儿子转较
阅读全文
摘要:2026 upd:解释拉完了,建议别看图。 LOJ133 就是区间上的问题搬到了矩阵上。 但其实矩阵上的问题处理起来并不容易。比如这道题,涉及矩阵最大值,必须采用二维线段树(线段树套线段树)的方式进行维护,非常繁琐。 但对于LOJ133这道题,因为只有单点修改区间求和,所以考虑使用二维树状数组,即树
阅读全文
摘要:immortalCO的博客 “一种高效处理无修改区间或树上询问的数据结构” lxl反对用猫树这个名字,并且认为这个名字就像ODT一样奇怪,可能叫“二区间合并”更好一些。 猫树的优势在于询问的时候可以做到 \(O(1)\),比线段树少一个 \(\log\),但是做不了修改操作。 猫树形如点分治,每次取
阅读全文
摘要:前置知识:普通平衡树。 实际上,平衡树能做到的操作不只有插入删除,查排名查值,前驱后继这些。 如果我们把平衡树移到区间上,我们甚至能够支持比线段树更强的操作——区间翻转。 这就是文艺平衡树这道题了。 1. 区间树 首先我们来明确一下区间树的概念。 顾名思义,区间树就是用来维护区间的。 具体地,我们规
阅读全文
摘要:0. 引子 treap 是一个同时具有 tree(即BST)和 heap 的特点的平衡树。 具体地说,我们会对每个节点随机一个 key 值,然后要求这棵 BST 要对 key 值同时满足堆的性质。也就是说,treap 是笛卡尔树的一种。 通过随机的 key 值,我们可以某种程度上随机确定树的形态,从
阅读全文
摘要:写法可能过时,谨慎学习实现。 0. 前言 熟知 BST 是会被恶意数据卡成\(O(n^2)\)的。(如下图) 树变成了一条链,这很显然不是我们想要的,我们需要找到一种方法来让 BST 保持平衡。 于是我们就有了各式各样的平衡树,在 OI 中应用最为广泛的为 Splay 和 fhq_treap 了,并
阅读全文
摘要:轻重链剖分是一个比较巧妙的技术,结合了以下两种思想: 链分治,即将树的结构剖分成链进行处理; 将树上问题转化为序列问题(dfs 序)。 给出一些定义: 重儿子:子树大小最大的一个儿子。 轻儿子:不是重儿子的儿子。 重边:连接重儿子的边。 轻边:连接轻儿子的边。 重链:重边组成的链。 如下图(不是我画
阅读全文
摘要:UVA11987(vjudge) 并查集的奇怪删除操作。 题目大意: 要求支持3个操作: 合并\(x,y\)所在集合; 将\(x\)移到\(y\)所在集合; 查询\(x\)所在集合中元素的个数和元素的和。 如果只有1、3操作,那么这道题就是一道简单的并查集。 现在有了2操作,那么就需要一点点技巧了。
阅读全文

浙公网安备 33010602011771号