44 #CSPJ202605C. ABC

ABC

【题目描述】

小华正在玩一个字符串游戏。他有一个长度为 NN 的大写字母字符串 SS,接下来会有 QQ 次修改操作。每次操作会将字符串中某个位置的字符替换成另一个大写字母,然后需要立即回答:当前字符串中包含多少个 ABC 作为连续子串?

这里,子串指的是从原字符串中截取一段连续的字符序列。例如,ababc 的子串,但 ac 不是,因为它们不连续。

请你帮助小华高效地处理这些查询。

【输入格式】

第一行包含两个整数 NNQQ,分别表示字符串长度和查询次数。
第二行包含一个长度为 NN 的字符串 SS,仅由大写英文字母组成。
接下来 QQ 行,每行包含一个整数 XiX_i 和一个字符 CiC_i,表示将 SS 的第 XiX_i 个字符替换为 CiC_i

【输出格式】

输出 QQ 行,第 ii 行表示第 ii 次查询后字符串中 ABC 子串的数量。

【样例 1】

7 4
ABCDABC
4 B
3 A
5 C
4 G
2
1
1
0

【样例 1 解释】

每次查询处理后,字符串 SS 的变化如下:

  • 处理第 11 个查询后:S=S = ABCBABC,其中 ABC 出现了 22 次(位置 11-33 和位置 55-77)。
  • 处理第 22 个查询后:S=S = ABABABC,其中 ABC 出现了 11 次(位置 55-77)。
  • 处理第 33 个查询后:S=S = ABABCBC,其中 ABC 出现了 11 次(位置 33-55)。
  • 处理第 44 个查询后:S=S = ABAGCBC,其中 ABC 出现了 00 次。

【样例 2】

3 3
ABC
1 A
2 B
3 C
1
1
1

【样例 2 解释】

查询处理前后,字符串 SS 可能保持不变。在这个例子中,每次修改都是将字符改成相同的字符,所以 ABC 的数量始终为 11

【样例 3】

15 10
BBCCBCACCBACACA
9 C
11 B
5 B
11 B
4 A
8 C
8 B
5 B
7 B
14 B
0
0
0
0
1
1
2
2
1
1

【数据规模与约定】

  • 3N2×1053 \leq N \leq 2 \times 10^5
  • 1Q2×1051 \leq Q \leq 2 \times 10^5
  • SS 是一个长度为 NN 的字符串,仅由大写英文字母组成
  • 1XiN1 \leq X_i \leq N
  • CiC_i 是大写英文字母