atcoder#ABC157E. [ABC157E] Simple String Queries

[ABC157E] Simple String Queries

配点 : 500500

問題文

長さ NN の英小文字から成る文字列 SS が与えられます。

QQ 個のクエリを処理してください。各クエリは以下の 22 種類のいずれかです。

  • type 11 : SSiqi_q 文字目を cqc_q に変更してください。元々 SSiqi_q 文字目が cqc_q である場合は、何もしないでください。
  • type 22 : SSlql_q 文字目から rqr_q 文字目まで (両端含む) から成る部分文字列に表れる文字が何種類あるかを答えてください。

制約

  • N,Q,iq,lq,rqN, Q, i_q, l_q, r_q は整数
  • SS は英小文字列
  • cqc_q は英小文字
  • 1N5000001 \leq N \leq 500000
  • 1Q200001 \leq Q \leq 20000
  • S=N|S| = N
  • 1iqN1 \leq i_q \leq N
  • 1lqrqN1 \leq l_q \leq r_q \leq N
  • 各テストケースに type 22 のクエリは 11 つ以上存在する

入力

入力は以下の形式で標準入力から与えられる。

NN

SS

QQ

Query1Query_1

\vdots

QueryQQuery_Q

44 行目から Q+3Q+3 行目の QueryiQuery_iは、以下の 22 つのいずれかである。

11 iqi_q cqc_q

22 lql_q rqr_q

出力

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

7
abcdbbd
6
2 3 6
1 5 z
2 1 1
1 4 a
1 7 d
2 1 7
3
1
5

11 つ目のクエリでは、 cdbb には b , c , d33 種類の文字が含まれますから、 33 を出力します。

22 つ目のクエリで、 SSabcdzbd に変更されます。

33 つ目のクエリでは、 a には a11 種類の文字が含まれますから、 11 を出力します。

44 つ目のクエリで、 SSabcazbd に変更されます。

55 つ目のクエリでは、 SS は変わらず abcazbd のままです。

66 つ目のクエリでは、 abcazbd にはa, b, c, d, z55 種類の文字が含まれますから、 55 を出力します。