#P8932. [JRKSJ R7] Clock Paradox

[JRKSJ R7] Clock Paradox

题目背景

一分钟后的出题人阻止了这个时刻的出题人写一个有趣的题目背景。

(题目背景图片来自 Phigros 曲绘,如有侵权,请告知出题人。)

题目描述

给你一个字符串 SS,设 S=s1s2snS=\overline{s_1s_2\dots s_n}

有一个字符串 TT,初始时 T=ST=S,你可以进行若干次操作,每次操作可以选取 SS 一个子串并插入到 TT 的任意位置。

你希望经过若干次操作后,T=s1s1s2s2snsnT=\overline{s_1s_1s_2s_2\dots s_ns_n},定义 f(S)f(S) 为满足此条件所需的最少的操作次数。

此外,字符串 SS 还会发生一些改变。具体地,有 qq 次修改操作,每次修改操作会给出 ppc\texttt{c},表示令 spcs_p\gets \texttt{c}c\texttt{c} 表示任意一个小写字母,而并非 ASCII 为 9999 的字符。

你需要在最开始和每次修改后求出 f(S)f(S) 的值。

输入格式

第一行一个整数 qq 表示修改次数。
第二行仅由小写字母构成的字符串 SS
接下来 qq 行,每行一个整数 pp 和一个小写字母 c\texttt{c} 表示一次修改。

输出格式

共有 q+1q+1 行,每行一个整数表示答案。

2
aabc
2 b
4 b
2
2
1

提示

Idea:cyffff,Solution:cyffff,Code:cyffff,Data:cyffff

Clock Paradox - WyvernP (Insane12.6)

本题输入输出文件较大,请使用恰当的输入输出方式。

提示

称字符串 AA 是字符串 SS 的子串当且仅当存在 1lrS1\le l\le r\le |S| 使得 A=slsl+1srA=\overline{s_ls_{l+1}\dots s_{r}}

样例解释

所有修改前,f(S)f(S) 的计算方法如下:

初始时,S=T=aabcS=T=\texttt{aabc}

第一次操作,选取 SS 的子串 aa\texttt{aa},插入到 TT 的最前端,操作后 T=aaaabcT=\texttt{aaaabc}

第二次操作,选取 SS 的子串 bc\texttt{bc},插入到 TT 的第 55 个字符后,操作后 T=aaaabbccT=\texttt{aaaabbcc},符合要求。

经过一次修改、两次修改后的 SS 分别等于 abbc\texttt{abbc}abbb\texttt{abbb},这两次修改后 f(S)f(S) 分别是 2211

数据规模

本题采用捆绑测试。 | Subtask\text{Subtask} | S\vert S\vert\le | qq\le | Score\text{Score} | | :----------: | :----------: | :----------: | :----------: | | 11 | 55 | 00 | 1010 | | 22 | 10410^4 | 10410^4 | 2020 | | 33 | 5×1055\times10^5 | 00 | 2020 | | 44 | 5×1055\times10^5 | 5×1055\times 10^5 | 2020 | | 55 | 3×1063\times10^6 | 3×1063\times 10^6 | 3030 |

对于 100%100\% 的数据,1S3×1061\le|S|\le3\times10^60q3×1060\le q\le 3\times10^6,保证 SS 仅由小写字母构成,保证 c\texttt{c} 为单个小写字母。