Time Limit: 2 sec / Memory Limit: 1024 MB
配点 : 500 点
問題文
長さ N の英小文字から成る文字列 S が与えられます。
Q 個のクエリを処理してください。各クエリは以下の 2 種類のいずれかです。
- type 1 : S の i_q 文字目を c_q に変更してください。元々 S の i_q 文字目が c_q である場合は、何もしないでください。
- type 2 : S の l_q 文字目から r_q 文字目まで (両端含む) から成る部分文字列に表れる文字が何種類あるかを答えてください。
制約
- N, Q, i_q, l_q, r_q は整数
- S は英小文字列
- c_q は英小文字
- 1 \leq N \leq 500000
- 1 \leq Q \leq 20000
- |S| = N
- 1 \leq i_q \leq N
- 1 \leq l_q \leq r_q \leq N
- 各テストケースに type 2 のクエリは 1 つ以上存在する
入力
入力は以下の形式で標準入力から与えられる。
N S Q Query_1 \vdots Query_Q
4 行目から Q+3 行目の Query_iは、以下の 2 つのいずれかである。
1 i_q c_q
2 l_q r_q
出力
type 2 の各クエリについて答えを改行区切りで出力せよ。
入力例 1
7 abcdbbd 6 2 3 6 1 5 z 2 1 1 1 4 a 1 7 d 2 1 7
出力例 1
3 1 5
1 つ目のクエリでは、 cdbb
には b
, c
, d
の 3 種類の文字が含まれますから、 3 を出力します。
2 つ目のクエリで、 S が abcdzbd
に変更されます。
3 つ目のクエリでは、 a
には a
の 1 種類の文字が含まれますから、 1 を出力します。
4 つ目のクエリで、 S が abcazbd
に変更されます。
5 つ目のクエリでは、 S は変わらず abcazbd
のままです。
6 つ目のクエリでは、 abcazbd
にはa
, b
, c
, d
, z
の 5 種類の文字が含まれますから、 5 を出力します。
Score : 500 points
Problem Statement
You are given a string S of length N consisting of lowercase English letters.
Process Q queries of the following two types:
- Type 1: change the i_q-th character of S to c_q. (Do nothing if the i_q-th character is already c_q.)
- Type 2: answer the number of different characters occurring in the substring of S between the l_q-th and r_q-th characters (inclusive).
Constraints
- N, Q, i_q, l_q, and r_q are integers.
- S is a string consisting of lowercase English letters.
- c_q is a lowercase English letter.
- 1 \leq N \leq 500000
- 1 \leq Q \leq 20000
- |S| = N
- 1 \leq i_q \leq N
- 1 \leq l_q \leq r_q \leq N
- There is at least one query of type 2 in each testcase.
Input
Input is given from Standard Input in the following format:
N S Q Query_1 \vdots Query_Q
Here, Query_i in the 4-th through (Q+3)-th lines is one of the following:
1 i_q c_q
2 l_q r_q
Output
For each query of type 2, print a line containing the answer.
Sample Input 1
7 abcdbbd 6 2 3 6 1 5 z 2 1 1 1 4 a 1 7 d 2 1 7
Sample Output 1
3 1 5
In the first query, cdbb
contains three kinds of letters: b
, c
, and d
, so we print 3.
In the second query, S is modified to abcdzbd
.
In the third query, a
contains one kind of letter: a
, so we print 1.
In the fourth query, S is modified to abcazbd
.
In the fifth query, S does not change and is still abcazbd
.
In the sixth query, abcazbd
contains five kinds of letters: a
, b
, c
, d
, and z
, so we print 5.