摘要:
基本概念 $Link\ Cut\ Tree$ ,简称 $LCT$,是一种用于维护动态树问题的数据结构。 使用 实链剖分 和 $Splay$ 来维护一棵树 $T$ 上的若干条实链,通过实链表示出树 $T$ 单次修改或查询操作均摊时间复杂度是 均摊 $\mathcal{O}(logn)$。 算法思想 实 阅读全文
摘要:
基本概念 $Trie$ 树是一种与字符串相关的数据结构,又名字典树,前缀树。它的主要思想是 用空间换时间。它可以用来 统计、排序或者保存大量的字符串。假设待查询的字符串为 $s$,那么 $Trie$ 树单次查询复杂度为 $O(|s|)$。 变种 $01\ Trie$ 是一种维护与 异或 相关问题的数 阅读全文
摘要:
题目大意 题目链接 给出一棵包含 \(n\) 个结点的无根树。已知这棵树上的每个结点 \(i\) 均有其唯一的“糖果类型” \(c_i\)。定义 \(v_i\) 表示第 \(i\) 个糖果类型的“美味程度”,\(w_i\) 表示第 \(i\) 次品尝某种糖果的“新奇指数”。已知第 \(i\) 次品尝 阅读全文
摘要:
基本概念 李超线段树是由学军中学队爷李超提出的一种数据结构,是线段树的一个变种。李超线段树可以维护函数定点最值,它通常用来处理这种类型的问题:每次可以在平面上加入一条线段,试求与直线 \(x = k\) 相交的的线段中,交点纵坐标最大(小)的线段编号。 李超线段树不需要更新结点信息和下传标记,它的单 阅读全文
摘要:
普通莫队 概念 普通莫队算法可以解决不强制要求在线的部分区间问题,主要是通过将询问按照最优顺序暴力处理来优化复杂度。 考虑 分块。将整个数组分成若干个长度都为 $\sqrt{n}$ 的块,把这些询问按左端点所属块大的编号为第一关键字,以右端点为第二关键字升序排序。这样做的时间复杂度较优,为 $O(n 阅读全文
摘要:
前言 由于笔者对半平面交算法的很多数学细节不是非常清楚,所以这篇博客可能会有描述不到位或者错误的地方。欢迎读者向笔者指出文章中的不足,也希望初学半平面交的同学不要用这篇博客来入门,以免产生了一些错误的理解,对计算几何之后的学习产生了影响。 前置知识 我们知道一条直线可以将一个平面分成两部分,我们称其 阅读全文
摘要:
算法模型 想象在一个平面上钉下了 $n$ 个钉子。现在有一根橡皮筋,我们把它撑开,期望在松手之后橡皮筋可以收缩,包住所有的 $n$ 个钉子。事实上,这正是一个凸包。如下图: 凸包定义为:周长最小的包含点集中所有点的 凸多边形 。即使存在某个凹多边形的周长与凸包相等且可以包含所有点,这个凹多边形也一定 阅读全文
摘要:
算法模型 用于求矩阵面积并或者周长并。 假设给定平面上若干个可能相交的矩阵,求它们的面积并(面积之和减去相交部分)或者周长并(外轮廓的长度)。我们可以虚拟出一条按顺序扫描整个平面的线段,通过对平行或垂直于 $x$ 轴的线段进行处理得到答案。 时间复杂度是 $O(nlogn)$ 算法思想 面积并 例题 阅读全文
摘要:
题目大意 题目链接 给定一个长度为 \(n\) 的序列 \(a\) ,元素编号为 \([0, n - 1]\) 。试维护一个支持以下操作的数据结构: 区间 \([l, r]\) 内的元素都 \(+ c\) 对于 \(l \leq i \leq r\) ,\(a_i = \lfloor \frac{a 阅读全文
摘要:
题目大意 题目链接 给定一个由 \(n\) 个数组成的序列 \(s\) 。已知有 \(m\) 个限制,每个限制 \(l_1, r_1, l_2, r_2\) 表示 \(s\) 满足 \([s_{l1}, s_{r1}]\) 和 \([s_{l2}, s_{r2}]\) 完全相同。试求一共有多少种构造 阅读全文
摘要:
题目大意 题目链接 定义一棵树的重心结点 \(u\) 为该树中任意满足删除该结点和与其相连的边后,产生的若干连通块大小均不超过 \(\lfloor \frac{n}{2} \rfloor\) 的结点。现在给出一棵包含 \(n\) 个结点和 \(n - 1\) 条边的树。每次您可以在原树上删去一条边再 阅读全文
摘要:
前言 某次模拟赛的 \(D\) 题。这道题……说实话,我赛时看到的时候已经只剩一个小时了。果断放弃去对拍,前三题真的太不稳了。不过 \(AC\) 后再回来看,其实赛时如果给我三个小时,我也未必能够做出正解,大概只能拿几档暴力的部分分。这道题赛后也是看了题解才能 \(AC\) ,不得不感慨大佬就是能把 阅读全文
摘要:
前言 其实这道题更像是先手玩一下如何处理 \(mex\),然后根据性质来选择使用 线段树 来维护。这道题还可以用 值域分块 和 莫队 来做,值域线段树 \(+\) 线段树的做法大概是码量最大的做法了(。 题目大意 题目链接 给定一个长度为 \(n\) 的数组 \(a\) 和 \(m\) 次询问,每次 阅读全文
摘要:
前言 这道题作为一道树形 \(+\) 贪心的题目而言,还是具有很大的参考价值的。从这道题的解法来看,并 不是 所有的题目都可以使用 确切的算法 解决。这道题使用贪心,是建立在题目中的 重要性质 的基础上。因此,当思路枯竭、题目没有显著特征的时候,不妨推敲一下题目的性质,针对这个性质来设计算法。 题目 阅读全文
摘要:
题目大意 弱化版本 和 题目链接 给定一个长度为 \(n\) 的序列 \(a\) ,现在想通过若干次操作和最小的花费将其变成序列 \(b\) ,您可以: 花费 \(x\) 的代价在任意一个位置加上 \(1\) 花费 \(y\) 的代价在任意一个位置减去 \(1\) 花费 \(z \times |i 阅读全文
摘要:
数列分块入门 \(1\) 题目链接 区间加法、单点查值 显然,这是一道分块的入门模板。对于每一个整块,我们维护一个加法标记,表示这个块被整体加上的值。对于被操作的区间,我们将其拆分成若干整块和至多两个不完整块,对于不完整块中的元素直接进行操作,对于完整块则直接修改加法标记即可。每次查询时,直接返回原 阅读全文
摘要:
基本概念 替罪羊树,又称 \(Scapegoat\ Tree\) ,是一种 平衡树 。这种平衡树的单次时间复杂度是 \(O(logn)\) 。若替罪羊树单位时间内最多同时存在 \(m\) 个结点,空间复杂度由于其特殊的 非指针内存回收 机制也可以达到 \(O(m)\) 。 替罪羊树的思想较为暴力,但 阅读全文
摘要:
题目大意 题目链接 给定一个长度为 \(n\) 的序列和 \(m\) 次操作,每次操作可以把序列所有值 \(x\) 改成值 \(y\) 。请在每次操作后输出序列中相同的值之间的最短距离。例如序列 \([1, 2, 1, 4, 2]\) ,其相同的值之间的最短距离为下标为 \(1\) 和 \(3\) 阅读全文
摘要:
概念 Splay 是一种 平衡树 ,由 $Daniel \ Sleator$ 和 $Robert \ Tarjan$ 提出。 Splay 利用 旋转 ,与 Treap 不同的地方在于 Splay 不会给每个结点另外附上一个随机权值,而是在每一次操作过后将被操作的结点旋转到根结点,在此过程中顺便维护树 阅读全文
摘要:
基本概念 FHQ Treap 是由 fhq 神犇提出的一种数据结构,它可以实现 Treap 的功能,并且不需要 Treap 的旋转操作,所以 FHQ Treap 又被称为 无旋 Treap 或者 非旋 Treap 。 FHQ Treap 支持可持久化。 算法思想 无旋 Treap 的主要操作有分裂( 阅读全文