算法 | 莫队算法
莫队算法适用于:若存在一个长度为 $n$ 的序列,对于序列上的 $m$ 个区间询问问题,如果一个区间答案能够在 $O(1)$ 转移到相邻区间的答案,那么可以通过莫队算法在 $O(n\sqrt m)$ 的复杂度求出所有询问。
对于区间 $[l,r]$,它的相邻区间定义为:
- $[l-1,r]$
- $[l+1,r]$
- $[l,r-1]$
- $[l,r+1]$
莫队算法适用于:若存在一个长度为 $n$ 的序列,对于序列上的 $m$ 个区间询问问题,如果一个区间答案能够在 $O(1)$ 转移到相邻区间的答案,那么可以通过莫队算法在 $O(n\sqrt m)$ 的复杂度求出所有询问。
对于区间 $[l,r]$,它的相邻区间定义为:
Manacher (manachar, 马拉车):在 $O(n)$ 时间内计算一个字符串内所有回文子串的算法。
字符串哈希:定义一种将字符串映射到一个整型哈希值的函数 $f(\cdot)$,我们希望这个函数可以方便地帮我们判断两个字符串是否相等。
树链剖 (pōu) 分:树链剖分用于将树分割成若干条链的形式,使它组合成线性结构,然后就可以用其他的数据结构(例如线段树)维护信息。
最近公共祖先 (LCA, Lowest Common Ancestor):树中两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。
最长公共上升子序列 (LCIS, Longest Common Increasing Subsequence):在给定两个序列中找到最长的公共子序列,满足子序列升序。