CF1098F Ж-function
题目描述
两个字符串 $s = s_1 s_2 \ldots s_n$ 和 $t = t_1 t_2 \ldots t_m$ 的最长公共前缀长度定义为最大的 $k \le \min(n, m)$,使得 $s_1 s_2 \ldots s_k$ 等于 $t_1 t_2 \ldots t_k$。我们用 $lcp(s, t)$ 表示字符串 $s$ 和 $t$ 的最长公共前缀长度。
字符串 $s_1 s_2 \dots s_n$ 的 Z 函数是一个整数序列 $z_1, z_2, \ldots, z_n$,其中 $z_i = lcp(s_1 s_2 \ldots s_n,\ s_i s_{i+1} \dots s_n)$。Ж 函数定义为 $z_1 + z_2 + \ldots + z_n$。
现在给定一个字符串 $s = s_1 s_2 \ldots s_n$ 和 $q$ 个询问。每个询问由两个整数 $l_i$ 和 $r_i$ 描述,其中 $1 \le l_i \le r_i \le n$。对于每个询问,答案定义为子串 $s_{l_i} s_{l_i +1} \ldots s_{r_i}$ 的 Ж 函数值。
输入格式
第一行输入一个仅包含小写英文字母的字符串 $s$($1 \leq |s| \leq 200\,000$)。
第二行输入一个整数 $q$,表示询问的数量($1 \leq q \leq 200\,000$)。
接下来的 $q$ 行,每行输入两个整数 $l_i$ 和 $r_i$,描述一次询问($1 \leq l_i \leq r_i \leq |s|$)。
输出格式
对于每个询问,输出一个整数,表示对应子串的 Ж 函数值。
说明/提示
在第一个样例中有四个询问:
- 第一个询问对应子串 bb,其 Ж 函数为 $2 + 1 = 3$;
- 第二个询问对应子串 abb,其 Ж 函数为 $3 + 0 + 0 = 3$;
- 第三个询问对应子串 b,其 Ж 函数为 $1$;
- 第四个询问对应子串 abdd,其 Ж 函数为 $4 + 0 + 0 + 0 = 4$。
由 ChatGPT 4.1 翻译