U103231 【模板】最长公共前缀

题目背景

Yazid 对编程的态度精益求精,他固执地认为求两个字符串的最长公共前缀居然是 $O(n)$ 的,这令他十分抓狂。

题目描述

现在有一个字符串,你要求它的任意两个子串的 $lcp$ (最长公共前缀) 的长度。

输入格式

第一行一个整数 $n$,表示**询问个数**。 接下来一行一个字符串,为母串 $S$。 接下来 $n$ 行,每行四个整数 $a_x,a_y,b_x,b_y$,分别表示第一个子串在母串中的起始与终止位置,第二个子串在母串中的起始与终止位置。

输出格式

$n$ 行,每行一个整数,表示两个子串的 $lcp$ 的长度。

说明/提示

#### 样例解释 对于第一个询问,第一个子串为 aba,第二个子串也为 aba, 它们的 $lcp$ 就是 aba,故答案为 $3$。 对于第二个询问,第一个子串为 abab,第二个子串为 ab, 它们的 $lcp$ 是 ab,故答案为 $2$。 ------------ #### 数据范围 对于 $40\%$ 的数据,满足 $n \le 10^4$,$|S| \le 10^4$。 对于 $100\%$ 的数据,满足 $n \le 5 \times 10^5$,$|S| \le 10^6$, 且 $1 \le a_x \le a_y \le |S|$,$1 \le b_x \le b_y \le |S|$。 **母串的位置从 $1$ 开始,同时注意使用较快的 IO 方式。**