摘要:
##前置知识 ###反转串 R(S) 一个字符串 S = S[1]S[2] · · · S[n] 其反串为R(S) = S[n]S[n − 1] · · · S[1]。 ###回文串性质 ####回文半径二分性 回文半径-1 等价于同时删掉回文串的首尾字母,依然是回文串。 ####回文串和Borde 阅读全文
摘要:
##背景 给出一个字典,和若干询问:多少个字典串在询问串中出现过。 即单串与多串的匹配问题。 #AC自动机 AC 自动机基于 Trie,将 KMP 的 Border 概念推广到多模式串上。 AC 自动机是一种离线型数据结构,即不支持增量添加新的字符串。 AC 自动机常用于将字符串询问类的问题进行离线 阅读全文
摘要:
##Border 如果字符串 的同长度的前缀和后缀完全相同,即 则称此前缀(后缀)为一个 (根据语境,有时 也指长度)。 特殊地,字符串本身也可以是它的 ,具体是不是根据语境判断。 ##周期和循 阅读全文
摘要:
##大步小步算法(baby step giant step,BSGS) 是一种用来求解离散对数(即模意义下对数)的算法,即给出 中 的值(这里保证 和 互质,求解 既然保证了 和 互质,那么很容易联想 阅读全文
摘要:
#虚树 讲解 ##模板 点击查看代码 struct Tree{ //原树 int tot,head[maxn],nx[maxn],to[maxn]; ll w[maxn]; void add(int x,int y,ll z){ to[++tot]=y;nx[tot]=head[x];head[x] 阅读全文
摘要:
##分治 分治作为一种思想在算法中被广泛使用,比如归并排序、线段树之类的算法都是使用了分治的思想。 除了这些算法的底层原理,分治单独拿出来运用的其中一种场景是作为一种统计类算法使用。 统计类问题一般指不带修改,静态查询类的问题。但是不同于静态查询问题,统计类问题一般要求“全查”,例如枚举所有的子区间 阅读全文
摘要:
##动态树 树上查询问题是指,给定一个图论中的树结构,需要对树上的子树或者链进行一系列增删改查的问题。 和序列问题中一般常说的“动态”和“静态”不同。 动态树问题一般指树结构发生改变。 *注意:一般对于纯换根(change root)操作,不视为是动态树问题。 #LCT结构 ###前置知识1:链分解 阅读全文
摘要:
参考博客 ##子树类查询问题 dsu on tree和长链剖分都是解决子树类静态查询问题的统计类算法。 这类问题首先要是“子树”查询,并且是“静态”不带修改的。 注意某些问题其实不太有必要上dsu on tree,比如子树元素和,子树元素最大值之类的。(可合并区间信息) 例如子树众数,子树元素种类数 阅读全文