题目概述
给出一个由小写字母构成的字符串,有 m 个询问
解题报告
因为强制在线询问区间,所以我们想到分块。以每个块的左端点开始构造后缀的回文自动机,就可以得到 ans[i][j] 表示从第 i 个块左端点开始到
然后对于每个询问,我们都只需要查询至多一个块中不同回文子串的个数(记录一些信息比如回文自动机此时的指针,以及是否与预处理的答案有重复),效率就有保证了。
回文自动机大佬可以无视下面的一大段
整理一下,我们需要实现两个操作:1.前端插入。2.“记忆化”。这两个其实翁文涛的论文里都有提到,我就盗过来简单分析一下。
前端插入
不妨在回文树上对每个节点再维护一个 fail′ 指针,表示这个节点的最长回文前缀指向的节点,那么每次加入新字符的时候,只需要沿着 s 的最长回文前缀的
fail′ 链找到一个最长的合法的 t 即可。……
所以,
t 的回文前缀与回文后缀的字符串集合其实是相同的。也就是说,回文树上一个节点的 f