摘要: 一、简介 Link-Cut Tree (简称 LCT) 是一种用来维护动态森林连通性的数据结构,适用于动态树问题。类比树剖,树剖是通过静态地把一棵树剖成若干条链然后用一种支持区间操作的数据结构维护,而 LCT 则是动态地去处理这个问题。这里引入实链剖分。 实链剖分: 与重链剖分类似,同样将与某一个儿子的连边划分为 实边,其余儿子的连边为 虚边。 对于一个点连向它儿子的所有边,选择⼀条边为实边,其他边为虚边。虚实之间是可以进行 转换 的。对于⼀条由实边组成的链,我们称之为 实链。 阅读全文
posted @ 2021-01-09 15:19 maoyiting 阅读(37) 评论(6) 推荐(1) 编辑
只有博主才能阅读该文。 阅读全文
posted @ 2021-01-08 13:48 maoyiting 阅读(0) 评论(0) 推荐(1) 编辑
摘要:一、简介 Splay(伸展树)是平衡树中的一种。它通过不断将某个节点旋转到根节点的位置,使整棵树仍满足 BST 的性质,并且保持平衡而不至于退化为链。 频繁访问的节点会被移动到离根节点较近的位置,进而获得更快的访问速度,均摊复杂度 O(n log n)。 阅读全文
posted @ 2021-01-04 12:27 maoyiting 阅读(47) 评论(0) 推荐(0) 编辑
摘要:Treap=Tree+Heap。Treap 是利用堆的性质来维护平衡的一种平衡树。对每个节点额外存储一个随机值,根据随机值调整 Treap 的形态,使其满足 BST 性质外,还满足父节点的随机值 ≥ 子节点的随机值。 阅读全文
posted @ 2021-01-02 13:31 maoyiting 阅读(64) 评论(0) 推荐(0) 编辑
摘要:一、二叉查找树 二叉查找树(Binary Search Tree,下文简称 BST)是一种二叉树的树形数据结构。 树上的每个节点带有一个数值,称为节点的“关键码”(也可以叫其他的 QAQ)。对于树中的任意一个节点: 该节点的关键码不小于它的左子树中任意节点的关键码;该节点的关键码不大于它的右子树中任意节点的关键码。 阅读全文
posted @ 2021-01-01 19:12 maoyiting 阅读(73) 评论(0) 推荐(0) 编辑
摘要:后缀自动机 是可以且仅可以接受一个母串 S 的后缀的 DFA。 SAM 的结构包含两部分:有向单词无环图(DAWG)以及一棵树(parent 树),它们的节点集合相同。 目标:最小化节点集合大小(SAM 是满足是可以接受 S 所有后缀的 最小的 DFA)。 阅读全文
posted @ 2020-12-31 22:30 maoyiting 阅读(83) 评论(0) 推荐(0) 编辑
摘要:一、后缀树 前置知识:字典树(Trie)。 后缀树:所有后缀 S[i~n] (1≤i≤n) 组成的 Trie 树。 本质不同的子串个数可以达到 O(n^2) 级别,故节点数为 O(n^2),与枚举原串的每个子串等价。 叶子节点只有不超过 O(n) 个,因此大部分节点都有且仅有一个孩子。 阅读全文
posted @ 2020-12-30 09:08 maoyiting 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 一、积性函数 数论函数是指一个正整数到整数的映射。积性函数:对于所有 互质 的整数 a,b,有性质 f(ab)=f(a)f(b) 的数论函数。常见的积性函数有:约数个数函数 d(n)=∑d∣n 1 约数和函数 σ(n)=∑d∣nd 约数 k 次幂函数 σ_k(n)=∑d∣n d^k 欧拉函数 φ(n)=∑ni=1[gcd(i,n)=1] 完全积性函数:对于所有整数 a,b,有性质 f(ab)=f(a)f(b) 的数论函数。 如常数函数 1,幂函数 Idk(n)=nk(特别地,Id1(n) 通常记作 Id(n)),单位函数 ε(n)=[n=1]。 阅读全文
posted @ 2020-12-28 20:18 maoyiting 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 一、前置概念 若集合 s≠∅ 和 S 上的运算 ⋅ 构成的代数结构 (S,⋅) 满足一下性质:封闭性:∀a,b∈S,a⋅b∈S。结合律:∀a,b,c∈S,(a⋅b)⋅c=a⋅(b⋅c)。单位元:∃e∈S,∀a∈S,e⋅a=a⋅e=a。逆元:∀a∈S,∃b∈S,a⋅b=b⋅a=e,称 b 为 a 的逆元。 则称 (S,⋅) 为一个 群。例如,整数集合整数集的加法 (Z,+) 构成一个群,单位元是 0,一个整数的逆元是它的相反数。 子群:若 (S,⋅) 是群,T 是 S 的非空子集,且 (T,⋅) 也是群,则称 (T,⋅) 是 (S,⋅) 的 子群。 置换 阅读全文
posted @ 2020-12-27 18:39 maoyiting 阅读(79) 评论(0) 推荐(0) 编辑
摘要:一、定义 后缀数组(Suffix Array),简称 SA。 后缀数组 是一个通过对字符串的所有后缀经过排序后得到的数组。我们定义: suffix(i) 表示第 i 个位置开始的后缀,即 S[i~n]。 sa(i) 表示将所有后缀排序后排名为 i 的后缀的起始下标。即排名为 i 的后缀为 suffix(sa(i))。 rk(i) 表示以起始下标为 i 的后缀的排名,也就是 suffix(i) 的排名。显然有 sa(rk(i))=i,rk(sa(i))=i。 阅读全文
posted @ 2020-12-26 16:35 maoyiting 阅读(121) 评论(0) 推荐(1) 编辑