問題一覧 > 通常問題

No.2992 Range ABCD String Query

レベル : / 実行時間制限 : 1ケース 6.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 31
作問者 : Iroha_3856 / テスター : lif4635 hiro1729
1 ProblemId : 11705 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-12-17 00:15:11

注意

C++での想定解コードは約 650ms\mathrm{650ms}PyPy3での想定解コードは約 4500ms\mathrm{4500ms} です。

高速な言語を使用することを強く推奨します。低速な言語の場合は入出力高速化や非本質・非自明な定数倍高速化が求められる可能性が高いです。

問題文

文字列 XX良い文字列であるというのを、以下の条件を満たすことと定義します。

  • ある非負整数 x,y,z,wx, y, z, w が存在して、XXxx 個のAyy 個のBzz 個のCww 個のDをこの順で連結したものと表せる

たとえば、ABCDAABCCDABCDD、空文字列などは良い文字列です。(x,y,z,wx, y, z, w00 でも良いことに注意してください)

すべての文字がABCDのいずれかからなる長さ NN の文字列 SS が与えられます。

正整数 QQ が与えられるので、与えられる順に QQ 個のクエリを処理してください。

クエリは以下の二種類のいずれかです。

  • 1 x c
    • 正整数 x(1xN)x (1 \leq x \leq N)ABCDのいずれかである文字 cc が与えられる
    • SSxx 文字目を文字 cc で更新する
  • 2 L R
    • 1LRN1 \leq L \leq R \leq N を満たす L,RL, R が与えられるので、SSLL 文字目から RR 文字目までからなる(連続)部分文字列を TT とする
    • TT変更操作を任意の回数(00 回でも良い)行って良い文字列にするときの変更操作を行う回数の最小値を出力する
    • ただし、TT変更操作を行うというのを、1iT1 \leq i \leq |T| を満たす ii を一つ選び、TTii 文字目を好きな文字で変更する操作として定義します

入力

N QN \ Q
SS 
query1\mathrm{query}_1
query2\mathrm{query}_2
\vdots
queryQ\mathrm{query}_Q

queryi\mathrm{query}_i は、以下のいずれかの形式で与えられる。

1 x c1\ x\ c
2 L R2\ L\ R

入力は全て以下の制約を満たす。

  • 1N,Q2×1051 \leq N, Q \leq 2 \times 10 ^ 5
  • SS は長さ NN の文字列
  • SS のすべての文字はABCDのいずれか
  • 1xN1 \leq x \leq N
  • ccABCDのいずれか
  • 1LRN1 \leq L \leq R \leq N
  • N,Q,x,L,RN, Q, x, L, R はすべて整数

出力

二つめのクエリについての答えを改行区切りで出力せよ。

サンプル

サンプル1
入力
5 5
ABACD
2 2 5
1 1 D
2 1 5
1 3 D
2 1 5
出力
1
2
2

  • 11 番目のクエリについて、T=T = BACDです。TT22 文字目をBに変更する 11 回の操作を行えば、TTBBCDと、良い文字列になります。
    00 回以下の操作で良い文字列にすることはできないので、答えは 11 です。
  • 22 番目のクエリについて、SS11 文字目がDに変更され、S=S = DBACDとなります。
  • 33 番目のクエリについて、T=T = DBACDです。TT11 文字目をAに、33 文字目をBに変更する 22 回の操作を行えば、TTABBCDと、良い文字列になります。
    11 回以下の操作で良い文字列にすることはできないので、答えは 22 です。
  • 44 番目のクエリについて、SS33 文字目がDに変更され、S=S = DBDCDとなります。
  • 55 番目のクエリについて、T=T = DBDCDです。TT11 文字目をAに、33 文字目をCに変更する 22 回の操作を行えば、TTABCCDと、良い文字列になります。
    11 回以下の操作で良い文字列にすることはできないので、答えは 22 です。

サンプル2
入力
15 15
BDBADBADBBBCBDA
2 1 7
1 5 B
1 9 D
1 5 C
2 1 13
1 3 C
2 7 8
2 1 4
1 8 A
2 3 12
2 3 7
1 8 A
1 7 D
2 7 10
2 1 13
出力
4
7
0
2
4
3
2
8

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。