在一次速记课堂上,老师为了训练学生的速记能力,设计了一个互动练习。
老师给出了一个长度为 N 的字符串 R,由小写英文字母组成,代表一份初始笔记内容。
老师会进行 M 次操作,操作分为两种类型:
类型 1:将笔记 R 中第 x 个字符修改为新的字符 c。(如果该位置的字符已经是 c,则无需修改。)
类型 2:统计笔记 R 从第 x 个字符开始到第 y 个字符结束(包含 x,y 两端)的子串中包含的不同字符数量。
你的任务是根据老师的指令,完成所有操作,并准确回答每次类型 2 操作的查询结果,以展示你的速记和分析能力。
第一行包含一个整数 N,表示笔记字符串的长度。
第二行包含一个由小写英文字母组成的字符串 R,长度为 N。
第三行包含一个整数 M,表示操作次数。
接下来 M 行,每行描述一个操作,格式为以下之一:1 x c 或 2 x y。
对于每个类型 2 的操作,输出一行,包含一个整数,表示对应子串中不同字符的数量。
7 abcdbbd 6 2 3 6 1 5 z 2 1 1 1 4 a 1 7 d 2 1 6
3 1 4
12 zbfouksglthm 15 2 3 10 1 11 y 2 6 10 1 8 u 2 2 7 2 3 4 2 1 11 2 5 7 1 5 v 2 4 8 1 6 e 2 1 2 1 3 t 1 7 q 1 12 g
8 5 6 2 10 3 5 2
21 fsllpwxxybjbiapylqrue 20 2 1 21 2 9 13 1 12 l 1 6 g 1 10 k 1 12 q 2 3 5 1 2 r 1 3 f 2 8 19 2 14 15 1 18 l 1 17 h 1 7 l 1 21 o 1 11 t 2 7 17 2 5 12 1 7 r 1 3 v
15 4 2 10 2 10 8
第一次操作:统计子串 "cdbb"(位置 3 到 6)的不同字符,包含 b、c、d 三种字符,输出 3。
第二次操作:将位置 5 的字符改为 z,笔记变为 abcdzbd。
第三次操作:统计子串 a(位置 1 到 1),仅包含 a 一种字符,输出 1。
第四次操作:将位置 4 的字符改为 a,笔记变为 abcazbd。
第五次操作:将位置 7 的字符改为 d,笔记不变,仍为 abcazbd。
第六次操作:统计子串 abcazb(位置 1 到 6)的不同字符,包含 a、b、c、z 四种字符,输出 4。
对于 100\% 的数据,满足 R 是由小写英文字母组成的字符串,c 是一个小写英文字母,1 \leq N \leq 500000,1 \leq M \leq 20000,1 \leq x,y \leq N,对于操作 2 满足 1 \leq x \leq y \leq N。
测试数据保证,至少有一个类型 2 的操作。
| 测试点 | 数据范围 |
|---|---|
| 1 \sim 8 | 1 \le N \le 100,1 \le M \le 20000 |
| 9 \sim 25 | 1 \leq N \leq 500000,1 \leq M \leq 20000 |