P5829 【模板】失配树

题目描述

给定一个字符串 $s$,定义它的 **$k$ 前缀** $\mathit{pre}_k$ 为字符串 $s_{1\dots k}$,**$k$ 后缀** $\mathit{suf}_k$ 为字符串 $s_{|s|-k+1\dots |s|}$,其中 $1 \le k \le |s|$。 定义 $\bold{Border}(s)$ 为**对于 $i \in [1, |s|)$,满足 $\mathit{pre}_i = \mathit{suf}_i$** 的字符串 $\mathit{pre}_i$ 的集合。$\bold{Border}(s)$ 中的每个元素都称之为字符串 $s$ 的 $\operatorname{border}$。 有 $m$ 组询问,每组询问给定 $p,q$,求 $s$ 的 **$\boldsymbol{p}$ 前缀** 和 **$\boldsymbol{q}$ 前缀** 的 **最长公共 $\operatorname{border}$** 的长度。

输入格式

输出格式

说明/提示

样例 $2$ 说明: 对于第一个询问,$2$ 前缀和 $18$ 前缀分别是 ``zz`` 和 ``zzaaccaazzccaacczz``,由于 ``zz`` 只有一个 $\operatorname{border}$,即 ``z``,故最长公共 $\operatorname{border}$ 长度为 $1$。 --- 对于 $16\%$ 的数据,$s$ 中的字符全部相等。 对于 $100\%$ 的数据,$1\leq p,q \le |s|\leq 10^6$,$1 \leq m \leq 10^5$,$s_i \in [\texttt{a}, \texttt{z}]$。