- 博客(199)
- 收藏
- 关注
原创 树上分治算法-点分治/动态点分治
尝试用容斥原理计算, 首先将当前重心的所有子树的点放入一个集合, 任取两个点计算距离, 如果。每次选取重心的过程是将子树划分成不相交的连通块, 每一个连通块大小。树的重心: 将该点删除后, 剩余每个连通块的点的数量。但是这样会产生不合法的情况, 可以分别处理每个子树的。因为每次最多删除一次树的重心, 一共最多。个点, 并且要排序, 总的算法时间复杂度。所在子树所有点的信息排序, 然后二分求。给整棵树的问题之后, 将问题分为两类。, 按照年龄排序, 相当于求。个子树, 因此可以直接。的方案数量, 可以用。
2025-12-26 14:30:30
529
原创 后缀自动机的概念与应用
会变成当前串, 那么子串出现次数应该累计(上图深红色的节点), 并且根据上面的性质, 这些点都是。对于一个节点存储的最长子串, 当子串长度变小的过程中(因为存储的子串都是连续的),分别表示当前集合的最长后缀的长度和最短后缀的长度, 形式化的表示。, 因此只会连接一条边, 因此所有的虚线边构成的图就是树。的子串都是一一对应的, 如果暴力的存储空间复杂度是。, 后面没有字符了, 假设在后缀自动机中的点是。因为每个状态的最短子串是固定的, 并且最短串。, 因为是公共的, 因此多个子串之间取最小值。
2025-12-23 14:51:45
489
原创 详解后缀数组(SA)数组
倍增法O(nlogn)O(n \log n)O(nlogn)对于一个字符串有很多后缀, 第iii个后缀假设当前字符串aababbaababbaababb, 后缀如下第一次只关注每个后缀的第一个字符按照字典序排序, 如果没字符用nullnullnull表示, 比任意字符都小第一次排序的结果, 第一个字符相同相对顺序不变可以用基数排序算法时间复杂度O(n)O(n)O(n)假设执行某一轮后已经按照前kkk个字符排好序了, 考虑前2k2k2k个字符将每个后缀的前kkk个字符当作第一关键字, 将后kkk个字符当作第
2025-12-20 13:53:13
844
原创 P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
假设已经知道了区间内众数出现的次数。查询区间众数出现的次数, 尝试对。对于每个数字记录出现的位置。假设区间内众数出现的次数是。
2025-12-18 14:41:37
522
原创 分块之基本思想
对块初始化, 定义块的起始位置和结束位置, 初始位置下标是。累计到桶中, 然后判断散列块的每个位置(假设是。对序列分块, 修改的时候首先修改块的。, 然后修改整块, 注意修改后需要对。出现的次数, 初始的众数是块内的众数。具体的来说, 假设区间左端点块号是。预处理这样数组, 算法时间复杂度。结束位置的众数, 算法时间复杂度。就知道了, 查询的时候需要查询。的影响, 整块的影响直接计算。首先确定块的大小, 然后对。进行排序处理, 查询的时候。的众数是否会对结果造成影响。查询整块的两侧, 然后再。
2025-12-16 12:53:05
1004
原创 区间不同数的个数-树状数组/线段树/莫队/主席树
移动到下一次查询的左端点, 对于当前。假设最坏情况下, 每次查询一个区间。假设对于当前数字上一次出现的位置是。指针只会走一次, 算法时间复杂度。, 不对答案产生影响, 否则答案。左右时间取最大值, 因此优化后的。因为每次移动指针最坏情况下是。因此左指针的最差时间复杂度是。因为树状数组维护的是位置的。蓝色部分是下一段查询的区间。指针, 移动到下一次查询的。, 左指针的最大移动次数是。次, 算法时间复杂度最坏。的数字的个数, 可以使用。上, 同时对于当前数字。块, 每一块长度是也是。, 右指针的移动次数是。
2025-12-13 16:42:55
890
原创 详解Splay平衡树
也就是该树的中序遍历是有序的, 可以实现查询第。:不管对Splay进行什么操作, 将当前操作的点。, 需要取值, 并且计算最终薪资的时候需要加。暴力做法是并查集 + 排序, 算法时间复杂度。能处理的问题(因为可以加入延迟标记)这样操作已经证明了, 均摊时间复杂度。Splay的特殊操作, 可以支持。类似于线段树, 树形结构需要通过。, 旋转之后也是这样的大小关系。如果没了解过线段树,大数, 查询一个数字的。节点, 将节点转到树根。, 可以记录一个偏移量。可以使用splay实现。的代表元素, 假设是。
2025-12-10 23:18:27
864
原创 基于值域的离线分治算法-整体二分
单点修改, 只需要在操作结构体中记录, 假设当前位置是。也同步修改, 以为多了操作, 操作数量最坏情况下是。放回到操作序列中, 方便下一层递归层级计算。, 新的数值产生新的贡献即可, 具体的来说。无论当前是添加操作还是修改操作都存储在。(4) 将划分好的左右缓冲区的。注意在操作序列修改后, 需要再。, 需要构建线段树, 同时为了。需要将树状数组或者线段树清空。, 那么只需要将原来的贡献。(1) 如果当前操作是。整体二分 + 树状数组。, 那当前位置是贡献是。整体二分 + 树状数组。整体二分 + 线段树。
2025-12-08 15:49:46
816
原创 进阶数据结构应用-单词
和哪些前缀匹配, 在AC自动机直接可以。我们可以统计这样一个数值, 对于串。递推思想, 对于当前后缀。因此直接按照AC自动机的。都是和当前后缀匹配的。, 那么答案需要累计。, 将前面的前缀全部。
2025-12-07 18:19:06
851
原创 进阶数据结构-AC自动机
有致病片段, 因为是匹配的, 当前后缀也包含那个前缀, 因此当前后缀也有致病片段, 因此可以做。AC自动机本质是在Trie树上用KMP算法的思想的结果。, 因此在统计单次数量的时候, 需要将指针。能到达的字符串都遍历一遍, 具体的来说。是根节点, 因此插入的时候是从节点。开始的, 因此AC自动机向前寻找。类比于KMP算法, AC自动机的。指针的过程进行优化, 具体的来说。因为对于Trie树来说, 节点。, 因此在查询过程中, 可以。, 非常高的效率检查主串。在上述Trie树中,问题就变成了如何计算。
2025-12-06 16:35:22
952
原创 详解KMP算法的原理和代码实现
连接, 拆分之后特殊字符消失,因为拆分之前两个字符串直接使用。, 如果不相等继续找第三长的。那么问题就变成了, 如何根据。的思想, 假设已经计算出了。, 对新的字符串求一遍。对于当前情况, 如果。, 可以进行拼接操作。
2025-12-06 11:55:04
818
原创 进阶数据结构应用-SPOJ 3267 D-query
有了这个性质, 在查询的时候需要统计。, 可以这样考虑, 对于当前数字。, 如果这个数字在区间。的数字个数, 可以使用。解决, 只需要将线段树。, 在线段树节点中统计。
2025-12-05 20:08:42
697
原创 可持久化数据结构-持久化Trie和持久化线段树
节点, 但是并不是插入的是相同的字符串, 需要分裂, 同时发现也需要用到。假设修改的是红色区域圈住的点, 线段树最多修改。个版本, 算法时间复杂度和空间复杂度都是。是根节点, 上图是插入两个字符串的情况。, 因为每次最多改变的节点数量是。(1)先考虑简单情况, 假设。个点, 右边是复制过来新的点。如果暴力的做法, 假设一共。, 求异或的最大值可以使用。节点, 这样当前位结果就是。的限制, 因此问题就变成了。个版本, 计算最大值即可。, 这样问题就得到了解决。个节点, 算法时间复杂度。
2025-12-05 13:42:02
589
原创 序列逆序对的计算方式
在归并排序向上合并的过程中, 对于两段有序的序列合并为一个序列, 如果是顺序的。, 具体的来说, 如果前面出现了。如果一段序列是有序的, 那么对于。, 不能用右半边统计, 也就是。构成了逆序对, 答案需要累加。, 可以统计前面有多少个数字。为什么统计左侧就是正确的?, 但是当出现了当前情况。注意: 树状数组的下标从。开始, 离散化的时候需要。构成逆序对, 然后再将。的时刻, 立刻统计出。, 因此对于当前位置。可以使用树状数组实现。
2025-12-04 12:19:15
729
原创 进阶数据结构应用-维护序列
但是延迟标记是有更新顺序的, 可以做如下套路, 假设当前考虑的区间是。(2)再讨论, 父节点的乘法延迟标记下传, 假设是。(1)此时, 父节点加法延迟标记下传, 假设是。先做加法再做加法, 假设区间中某个数字是。此时, 父节点加法延迟标记下传, 假设是。因此对于延迟标记的更新, 我们认为的规定。具体的来说假设当前节点的加法延迟标记是。, 父节点向下传递的加法标记是。, 很难在原数字基础上加。, 得到下面的式子(除非。那么新的加法延迟标记是。, 新的乘法延迟标记是。线段树需要记录的属性。
2025-12-03 16:09:43
726
原创 进阶数据结构-线段树
在修改的时候, 也需要将当前延迟标记向下传, 例如假设当前区间的延迟标记是。之间的区间, 线段树的单独的子节点(类似于上图红色框住的点)的数量一定是。假设修改的是这样一颗线段树, 修改一段区间最坏情况下节点个数是。当前节点的标记未向下传播, 只给根节点打上了标记, 直接返回。假设计算红色区间内的区间和, 对于当前节点。, 具体的来说, 线段树一般有如下操作。因为前面的都是满二叉树, 节点总数等于。分配空间的时候, 一般倾向于。具体的来说, 伪代码如下。, 因此总的节点数量。, 在计算的时候需要。
2025-12-03 14:04:28
935
原创 进阶数据结构应用-线段树扫描线
具体的来说, 假设线段树修改到了上面红色的节点(子节点), 但是每次查询只查询根节点(蓝色), 只会用到根节点的。在修改完子节点回溯的过程中向上更新(添加减少的都是相同的子节点的值), 也就是。个矩形覆盖, 需要累加到答案当中。不连续, 将面积从左到右做细分。类似于扫描的思想, 只要是。上建立线段树, 检查当前。抽象为线段树的两个操作。等价与当前这段区间被。线段树维护的节点信息。
2025-12-03 13:47:14
662
原创 进阶数据结构应用-区间最大公约数
因此可以将对区间的查询和修改转化为如下形式。因为左边能推出右边, 并且右边能推出左边,对于修改情况, 假设当前区间的最大公约数是。, 因为是差分数组, 查询的时候需要计算。, 修改也是区间修改, 但是因为转化为了。因为涉及到区间修改和区间查询, 使用。, 单点修改值(因为改的是差分数组), 那么当前区间的最大公约数等于。因此如果是直接修改一个位置,, 因此可以直接推广到上面情况。, 并且因为最大公约数具有。, 只存储一个最大公约数。, 发现因为一个数的。, 是可以直接操作的。, 对于当前区间情况。
2025-12-02 12:20:41
848
原创 进阶数据结构应用-你能回答这些问题吗
那么问题变成了, 计算当前位置的。信息, 那么问题又变成了,因为结果的最大子段和是可能。, 答案是显然可以的。
2025-12-01 16:33:51
381
原创 基础数据结构应用-谜一样的牛
推断出当前牛的身高, 假设当前牛的身高是。上述的操作其实是平衡树的操作,, 那么当前牛的身高是在。, 初始化每个位置都是。
2025-12-01 12:16:05
855
原创 进阶数据结构应用-一个简单的整数问题2(Fenwick-Tree 解法)
尝试将上述公式展开为表格, 发现可以将表格补齐, 补齐后的结果。区间查询操作, 可以转化为求。可以使用个树状数组一个维护。问题, 因为只要知道了。, 进行区间修改操作。, 计算前缀和需要开。
2025-11-30 20:34:36
1044
原创 基础数据结构应用-一个简单的整数问题
只能支持单点修改, 单点查询。如果对原序列的一个区间。区间修改, 单点查询。因此可以求出原序列的。, 那么就是差分序列。
2025-11-30 19:33:55
772
原创 进阶数学算法-取石子(ICPC 亚洲区域赛(成都) 2011)
首先考虑简单情况, 我们假设所有堆石子数量都。是奇数情况, 假设合并某两堆, 堆数量减少。是偶数情况, 假设合并某两堆, 堆数量减少。实现上述状态转移, 算法时间复杂度。变为奇数, 假设拿走一个石子,变为奇数, 假设拿走一个石子,首先是奇数状态的情况, 因为。先手必败, 以下是证明过程。再证明偶数状态的情况,因此, 简单情况下,如果是奇数, 先手必胜。表示: 堆的石子个数为。, 我们将该情况设为。
2025-11-29 13:57:24
825
原创 基础数学算法-扑克牌
这样就可以将当前局面的所有牌表示出来, 下一步问题是如何进行。因为该问题的状态数量很多, 建图不方便, 也就是。注意: 如果当前使用的牌的数量超过了总和。状态转移到下一个状态, 翻开小王的情况。是可以作为任意一张牌加入到牌堆当中。要求计算翻的牌的期望数量。因此需要重新设计状态表示。, 也就是对于当前状态。那么未翻开牌的数量是。, 因此上述算法使用。
2025-11-28 15:45:10
674
原创 基础数学算法-绿豆蛙的归宿
算法只需要实现上述的公式, 从后向前递推, 因为是拓扑图的递推关系, 不存在环。因为每个点只会被考虑一次, 算法时间复杂度。跳到下一个位置, 要求计算的是。图的性质是, 从起点开始。, 图中所有点也能到达。排序 + 逆序递推代码。因此可以定义状态表示。
2025-11-28 11:40:56
362
原创 进阶数学算法-破译密码
算法之后, 整体的算法时间复杂度降低到。将序列分为两部分, 第一部分有。因此第二部分不同的取值最多有。, 也就是说右边式子去掉一个。已经证明, 现在问题变成了。等于左边, 也就是原来的数。, 使得下面的式子成立。的数对个数, 可以用。个, 因此第二段最多。
2025-11-27 21:25:23
621
原创 基础数学算法-Devu和鲜花
因为计算每种花取的上界不好计算, 可以采用。很小, 直接可以从定义计算, 并且因为。现在问题就变成了, 如何求出。, 上述方程可以转化为。问题就变成了如何根据。
2025-11-27 16:16:50
653
原创 基础数学算法-有趣的数列
是质数, 扩展欧几里得算法求逆元的前提条件是。法求组合数, 注意每次计算组合数的时候清空。, 求合法的路径的数量, 就是。, 也就是说选法一定在。算法求解, 还是不行。快速幂求逆元的前提是。阶乘分解代码, 注意。
2025-11-26 16:06:34
394
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅