Logo 邂逅编程之美

UOJ

时间限制:2 s 空间限制:512 MB
统计

问题描述

给定长度为 n 的字符串 s。
我们称 s 的一个子串是合法的: 当且仅当该子串能够被不重不漏地划分成若干部分, 使得 每个部分都是 s 的一个非空后缀。
现在有 q 次询问。每次询问给定 l, r,问 s[l ... r] 是否是合法子串。
输入格式
第一行输入两个数 n, q 。
第二行输入一个字符串 s。
接下来 q 行,每行输入两个正整数 l, r 。
输出格式
输出 q 行,其中第 i 行表示第 i 次询问的答案。
输入输出样例 1
输入样例

6 3
abcaab 
4 6
1 2
2 5
输出样例

Yes
Yes 
No
样例解释
对于第一组询问, s[4, 6] = s[4, 6]。
对于第二组询问, s[1, 2] = s[5, 6]。
对于第三组询问,可以证明不存在一种合法的划分方案。
样例
约定和数据范围
本题采用捆绑测试
Subtask 1(30%) :$n \le 2\times 10^3$ 。
Subtask 2(15%): $\sum (r - l + 1) \le 10^6$ ,依赖 Subtask 1。
Subtask 3(15%):字符串 s 随机生成。
Subtask 4(20%):$n, q \le 10^5$ ,依赖 Subtask 2。
Subtask 5(20%):无特殊限制。依赖 Subtask 3, 4。
对于 100% 的数据满足:$ 1\le n, q \le 10^6 , 1 \le l\le r \le n $,s 仅由小写字母构成。