UOJ Logo Universal Online Judge

UOJ

#819. 【NOI2023】字符串

附件下载 统计

小 Y 是一名大学生,最近正在研究字符串方向的问题。

小 Y 了解到关于字符串的如下定义:

  • 给定一个长度为 n 的字符串 s[1:n],我们定义其子串 s[l:r]1lrn)为选择 s[l],s[l+1],,s[r], 将其顺次拼接得到的新字符串。
  • 给定一个长度为 n 的字符串 s[1:n],我们定义其翻转后的结果 R(s) 为将 s[n],s[n1],,s[1] 顺次拼接,也就是将字符串反序拼接得到的字符串。
  • 给定两个长度均为 n 的字符串 a[1:n],b[1:n],我们定义 a 的字典序小于 b 当且仅当存在 1in,使得对于任意 1j<ia[j]=b[j],且 a[i]<b[i]

在了解了上述定义后,小 Y 想到了这样的问题:

给定一个长度为 n 的字符串 s[1:n]。有 q 次询问,每次询问给定两个参数 i,r。你需要求出有多少 l,满足如下条件:

  • 1lr
  • s[i:i+l1] 字典序小于 R(s[i+l:i+2l1])

小 Y 想求助你帮忙解决这一问题。

输入格式

本题有多组测试数据。

输入的第一行包含两个整数 c,t,分别表示测试点编号和测试数据组数。c=0 表示该测试点为样例。

接下来依次输入每组测试数据,对于每组测试数据:

输入的第一行包含两个正整数 n,q,表示字符串长度和询问次数。

输入的第二行包含一个长度为 n 的仅包含小写字母的字符串 s

输入的接下来 q 行,每行包含两个正整数 i,r。表示一次询问,保证 i+2r1n

输出格式

对于每一组测试数据的每一次询问,输出一行一个整数,表示满足条件的 l 的个数。

样例一

input

0 2
9 3
abacababa
1 4
2 4
3 3
9 3
abaabaaba
1 4
2 4
3 3

output

4
0
3
2
0
2

explanation

对于第一组数据的第一组询问:

  • l=1 时,s[i:i+l1]=aR(s[i+l:i+2l1])=b
  • l=2 时,s[i:i+l1]=abR(s[i+l:i+2l1])=ca
  • l=3 时,s[i:i+l1]=abaR(s[i+l:i+2l1])=bac
  • l=4 时,s[i:i+l1]=abacR(s[i+l:i+2l1])=baba

这四种情况中,s[i:i+l1] 的字典序均小于 R(s[i+l:i+2l1])。因此答案为 4

样例二

见附件下载。

该样例数据范围满足测试点 5

样例三

见附件下载。

样例四

见附件下载。

该样例数据范围满足测试点 2425

数据范围

对于所有测试数据保证:1t51n1051q1051i+2r1n,字符串 s 仅包含小写字母。

测试点编号 n q 特殊性质
1 5 5 A
2 10 10
3 20 20
4 50 50
5 102 102
6 103 103
7 2,000 2,000
8 3,000 3,000
9 4,000 4,000
10 23,333 23,333 A
11 5×104 5×104
12 75,000 75,000
13 9×104 9×104
14 105 105
15 23,333 23,333 B
16 75,000 75,000
17 9×104 9×104
18 105 105
19 23,333 23,333
20 5×104 5×104
21 75,000 75,000
22 9×104 9×104
23 95,000 95,000
2425 105 105

特殊性质 A:保证字符串中仅包含字符 ab,且每个字符独立等概率地在 ab 中选择。

特殊性质 B:保证字符串中的相邻字符互不相同。

时间限制:1s

空间限制:512MB