AT_abc372_c [ABC372C] Count ABC Again
Description
[problemUrl]: https://atcoder.jp/contests/abc372/tasks/abc372_c
長さ $ N $ の文字列 $ S $ が与えられます。クエリが $ Q $ 個与えられるので、順番に処理してください。
$ i $ 番目のクエリは以下の通りです。
- 整数 $ X_i $ と文字 $ C_i $ が与えられるので、 $ S $ の $ X_i $ 番目の文字を $ C_i $ に置き換える。その後、 $ S $ に文字列 `ABC` が部分文字列として何箇所含まれるかを出力する。
ここで、 $ S $ の **部分文字列** とは、$ S $ の先頭から $ 0 $ 文字以上、末尾から $ 0 $ 文字以上削除して得られる文字列のことをいいます。
例えば、`ab` は `abc` の部分文字列ですが、`ac` は `abc` の部分文字列ではありません。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ Q $ $ S $ $ X_1 $ $ C_1 $ $ X_2 $ $ C_2 $ $ \vdots $ $ X_Q $ $ C_Q $
Output Format
$ Q $ 行出力せよ。 $ i $ 行目 $ (1\le\ i\le\ Q) $ には $ i $ 番目のクエリに対する答えを出力せよ。
Explanation/Hint
### 制約
- $ 3\le\ N\le\ 2\times\ 10^5 $
- $ 1\le\ Q\le\ 2\times\ 10^5 $
- $ S $ は英大文字からなる長さ $ N $ の文字列
- $ 1\le\ X_i\le\ N $
- $ C_i $ は英大文字
### Sample Explanation 1
各クエリを処理した後の $ S $ は次のようになります。 - $ 1 $ つ目のクエリを処理後: $ S= $ `ABCBABC` となる。この中に `ABC` は部分文字列として $ 2 $ 回登場する。 - $ 2 $ つ目のクエリを処理後: $ S= $ `ABABABC` となる。この中に `ABC` は部分文字列として $ 1 $ 回登場する。 - $ 3 $ つ目のクエリを処理後: $ S= $ `ABABCBC` となる。この中に `ABC` は部分文字列として $ 1 $ 回登場する。 - $ 4 $ つ目のクエリを処理後: $ S= $ `ABAGCBC` となる。この中に `ABC` は部分文字列として $ 0 $ 回登場する。
### Sample Explanation 2
クエリの処理前と処理後で $ S $ が変わらない場合もあります。