#P6385. 『MdOI R2』Little Goth

    ID: 6903 远端评测题 1000~3000ms 500MiB 尝试: 0 已通过: 0 显示难度NOI/NOI+/CTS 上传者: 标签>字符串动态规划 DP贪心后缀自动机 SAMO2优化广度优先搜索 BFS动态树 LCT分块后缀树洛谷月赛

『MdOI R2』Little Goth

背景

小 M 和小 B 是一对好朋友,她们很喜欢爬山。

题目描述

山可以抽象为一个长为 nn 的字符串 SS,串中仅包含小写字母。

对于一个字符串 SS,我们定义 ∣S∣|S| 表示串的长度,SL…RS_{L\ldots R} 表示由 SS 中从左往右数,第 LL 个字符到第 RR 个字符依次连接形成的字符串。

小 M 一开始的位置是 ii,她想要到达位置在 kk 处的山顶,而小 B 则要帮助她。为此,她们需要进行一系列操作。

她们必须在所有操作之前使用一次位于 pp 处的传送法阵,通过施展法术,可以使小 B 的位置变为任意满足 j≥ij \geq i 且 Si…j=Sp…p+(j−i)S_{i \ldots j} = S_{p \ldots p + (j-i)} 的 jj。但同时,她们需要付出 n−jn-j 的代价。保证这样的 jj 存在。

之后,假设小 M ,小 B 的位置分别为 ii 和 jj,她们可以任意次进行下列操作中的一种:

  • 让小 M 爬,即令 i=i+1i=i+1 或 i=i−1i = i-1。如果这一步操作之后 i>ji>j,则 令 j=ij=i。

  • 让小 B 爬,即令 j=j+1j=j+1 或 j=j−1j=j-1。如果这一步操作之后 i>ji>j,则令 i=ji=j。

  • 使用螺旋升天,具体而言,选择两个下标 ll 和 rr,满足 Sl…r=Si…jS_{l \ldots r} = S_{i \ldots j},然后令 i=l,j=ri=l,j=r。

出于某些原因,任何一次操作结束后,需要保证 1≤i,j≤n1 \leq i , j \leq n。进行一次上述任意一种操作,都需要付出 11 的代价。

爬山是很累的,因此她们想知道,至少需要付出多少代价才能让小 M 到达山顶,也就是让 i=ki=k。又因为她们很喜欢爬山,她们有很多组询问要问你。

输入格式

第一行两个整数,nn 和 qq,表示串 SS 的长度和询问的个数。

第二行一个长度为 nn 的字符串 SS,仅包含小写字母。

接下来 qq 行,每行三个整数 i,pi,p 和 kk,表明小 M 的位置,传送法阵位置和山顶的位置。

输出格式

共 qq 行,第 ii 行一个整数,表示对于第 ii 个询问给定的 i,pi,p 和 kk,至少需要付出多少代价,才能让小 M 到达山顶,也就是,让小 M 的位置 i=ki=k。

8 2
dacdaaaa
5 8 1
1 4 5
5
8

提示

【帮助与提示】

为方便选手测试代码,本题额外提供一组附加样例供选手使用。

样例输入 样例输出


【样例解释】

对于样例的第一组询问,使用传送法术时,只能令 j=5j=5,付出 8−5=38-5=3 的代价。之后,首先使用一次第三种操作,选择 l=2,r=2l=2,r=2,令 i=l,j=ri=l,j=r,然后使用一次第一种操作,令 i−1i-1,即可使 i=ki=k,一共付出 55 的代价。

对于第二组询问,可以选择 j=2j=2,付出 8−2=68-2=6 的代价,然后使用一次第三种操作,选取 l=4,r=5l=4,r=5 并使 i=l,j=ri=l,j=r,然后进行一次第一种操作,令 i+1i+1 即可使 i=ki=k。一共付出 88 的代价。


【数据范围】

本题采用捆绑测试。

对于全部数据,保证 1≤n,q≤3×1041 \leq n,q \leq 3\times 10^4,SS 中仅包含小写字母。

子任务编号 n≤n\leq q≤q \leq 特殊性质 分值 时间限制
Subtask 1 1515 无 33 1s
Subtask 2 8080 1414
Subtask 3 2×1042 \times 10^4 SS 中仅包含a 88 3s
Subtask 4 S1S_1 77
Subtask 5 400400 无 99 1s
Subtask 6 2×1042\times 10^4 2×1042 \times 10^4 所有询问的 kk 相同 1010 3s
Subtask 7 10310^3 无 2s
Subtask 8 1.5×1041.5 \times 10^4 1111 3s
Subtask 9 3×1043 \times 10^4 2828

性质 S1S_1 是,对于给定的 pp,满足条件的 jj 唯一。