SZTG-NOIP-L5829. 【模板】失配树

提交0 通过1
通过率0%
时间限制1000ms
内存限制512MiB

题目描述

题目描述

给定一个字符串 ss,定义它的 kk 前缀 prek\mathit{pre}_k 为字符串 s1…ks_{1\dots k},kk 后缀 sufk\mathit{suf}_k 为字符串 s∣s∣−k+1…∣s∣s_{|s|-k+1\dots |s|},其中 1≤k≤∣s∣1 \le k \le |s|。

定义 Border(s)\bold{Border}(s) 为对于 i∈[1,∣s∣)i \in [1, |s|),满足 prei=sufi\mathit{pre}_i = \mathit{suf}_i 的字符串 prei\mathit{pre}_i 的集合。Border(s)\bold{Border}(s) 中的每个元素都称之为字符串 ss 的 border⁡\operatorname{border}。

有 mm 组询问,每组询问给定 p,qp,q,求 ss 的 p\boldsymbol{p} 前缀 和 q\boldsymbol{q} 前缀 的 最长公共 border⁡\operatorname{border} 的长度。

输入格式

第一行一个字符串 ss。

第二行一个整数 mm。

接下来 mm 行,每行两个整数 p,qp,q。

输出格式

对于每组询问,一行一个整数,表示答案。若不存在公共 border⁡\operatorname{border},请输出 00。

aaaabbabbaa
5
2 4
7 10
3 4
1 2
4 11
1
1
2
0
2
zzaaccaazzccaacczz
3
2 18
10 18
3 5
1
2
0

提示

样例 22 说明:

对于第一个询问,22 前缀和 1818 前缀分别是 zz 和 zzaaccaazzccaacczz,由于 zz 只有一个 border⁡\operatorname{border},即 z,故最长公共 border⁡\operatorname{border} 长度为 11。


对于 16%16\% 的数据,ss 中的字符全部相等。

对于 100%100\% 的数据,1≤p,q≤∣s∣≤1061\leq p,q \le |s|\leq 10^6,1≤m≤1051 \leq m \leq 10^5,si∈[a,z]s_i \in [\texttt{a}, \texttt{z}]。