#2761. P3374 - 字符串的魔法变换

P3374 - 字符串的魔法变换

题目描述

在一个风和日丽的周末,编程竞赛社团的成员们聚集在校园的计算机实验室里,准备迎接一场紧张刺激的编程挑战。社团的主席,一位对算法和数据结构充满热情的学长,向社团成员们宣布了今天的挑战题目——“字符串的魔法变换”。

题目是这样的:社团主席给定了一个由大小写英文字母组成的长字符串S,长度在1到10^5个字符之间。社团成员们需要编写一个程序,来应对两种类型的操作:

  1. 查询操作​:成员们需要回答在给定的下标区间[l, r]内,有多少种不同的字母。这里的“不同”是指忽略大小写的不同,比如'A'和'a'被视为同一种字母。
  2. 修改操作​:成员们需要将字符串中下标为a的字符改为另一个给定的字母b

社团成员们被告知,他们将面对q次操作,每次操作都是上述两种类型之一,且q的范围也是1到10^5。

为了赢得这场挑战,社团成员们需要设计一个高效的算法来处理这些操作。他们知道,这不仅仅是一个编程问题,更是一个团队协作和智力的考验。每个成员都开始思考如何利用数据结构和算法来优化程序的性能。

在紧张而充满创意的氛围中,成员们开始编写代码,尝试不同的解决方案。有的成员专注于优化查询操作,有的则在思考如何快速处理修改操作。他们互相讨论,互相帮助,共同面对这个挑战。

随着时间的推移,一些成员开始展示他们的初步成果,而其他人则在这些基础上进一步改进。最终,他们不仅找到了解决问题的方法,还学到了如何在压力下进行团队合作,以及如何在有限的时间内解决复杂问题。

这场编程挑战不仅锻炼了成员们的编程技能,也增强了他们的团队精神和解决问题的能力。当挑战结束时,每个人都感到收获满满,期待着下一次的社团活动。

输入格式

输入第一行包含了一个长度不超过10510^5的字符串,该字符串只含有大小写字母。

输入第二行有一个整数 qq, 表示进行操作的次数 (1q105)(1 \le q \le 10^5)

接下来有 qq 行,每一行的操作和问题描述的格式一样. 保证至少有一个查询。

输出格式

对于每一次查询, 输出对应区间 [l,r][l, r] 内不同种类字母的数量。

AbAcaBa

5

query 1 4

do 4 b

do 5 b

query 4 6

query 1 7
3
1
2

数据范围 对于20%20\%的数据,1len(S)1001 \le len(S) \le 1001q1001 \le q \le 1001LR1001 \le L \le R \le 100

对于80%80\%的数据,1len(S)1051 \le len(S) \le 10^51q1051 \le q \le 10^51LR1051 \le L \le R \le 10^5