问题3693--[JSOI2008]火星人的研究

3693: [JSOI2008]火星人的研究

时间限制: 2 Sec  内存限制: 512 MB
提交: 0  解决: 0
[提交] [状态] [讨论版] [命题人:]

题目描述

火星人是一种好奇心很大的生物。最近,火星人对字符串产生了浓厚的兴趣。他们研究了字符串的LCP: 对于字符串str[1..n],LCP(i, j)为str[i..n]与str[j..n]这两个字符串的公共前缀长。 例如str="madamimadam": [IMG]ProblemImg/1823.jpg[/IMG] 有LCP(1, 7) = LCP("madamimadam", "madam") = 5 LCP(4, 8) = LCP("amimadam", "adam") = 1 LCP(10,11) = LCP("am", "m") = 0 后来,火星人发现,如果进行了后缀排序,就能够很快地求LCP,同样,如果能很快地求出字符串的LCP,也可以高效地把所有后缀排序。不过事情总不是想象的那么简单,地球人JS总是喜欢测试火星人的智商:他会在火星人把字符串的后缀排序以后,修改原来的字符串,导致火星人的工作全盘浪费。 于是火星人请到了聪明的你,设计一个程序,对给出的字符串能够支持以下三种操作: 1、求LCP(i, j) 2、将第i个位置的字符修改 3、在第i个位置后插入一个字符 火星人很害怕被地球人耻笑,所以希望你的算法能有很高的执行效率。

输入

输入文件第一行为一个字符串(仅包含小写字母)。 接下来的一行的整数Q代表操作的个数(1 ≤Q ≤150000)。 接下来Q行表示了待执行的操作。 Q i j表示求LCP(i, j)的数值 R i char表示将第i位置的字符替换成小写字母char I i char表示在第i个字符后插入小写字母char

输出

对于每一个Q i j,输出一行为LCP(i, j)的数值。

样例输入

madamimadam
7
Q 1 7
Q 4 8
Q 10 11
R 3 a
Q 1 7
I 10 a
Q 2 11

样例输出

5
1
0
2
1

来源/分类

 

[提交] [状态]