Loading

随笔分类 -  数据结构

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