luogu#P5829. 【模板】失配树

【模板】失配树

题目描述

给定一个字符串 ss,定义它的 kk 前缀 prek\mathit{pre}_k 为字符串 s1ks_{1\dots k}kk 后缀 sufk\mathit{suf}_k 为字符串 ssk+1ss_{|s|-k+1\dots |s|},其中 1ks1 \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) 中的每个元素都称之为字符串 ssborder\operatorname{border}

mm 组询问,每组询问给定 p,qp,q,求 ssp\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 前缀分别是 zzzzaaccaazzccaacczz,由于 zz 只有一个 border\operatorname{border},即 z,故最长公共 border\operatorname{border} 长度为 11


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

对于 100%100\% 的数据,1p,qs1061\leq p,q \le |s|\leq 10^61m1051 \leq m \leq 10^5si[a,z]s_i \in [\texttt{a}, \texttt{z}]