QOJ.ac

QOJ

시간 제한: 5.5 s 메모리 제한: 1024 MB 총점: 100 해킹 가능 ✓

#17163. 字符串工坊

통계

Cleopatra 喜欢字符串。当她拿到一个长度为 $n$ 的字符串 $s$(由字符 $s[1], \dots, s[n]$ 组成)时,她会立即开始对其进行排序。在排序过程中,她会执行一系列形如 $s[i] \leftrightarrow s[i + 1]$ 的交换操作,其中 $i \in \{1, 2, \dots, n - 1\}$。最后,她会返回排序后的字符串,并索要等同于所有进行过的交换操作中 $i$ 的总和的金币数量(如果同一个 $i$ 进行了多次交换,则该 $i$ 将在总和中被计算多次)。Cleopatra 并不浪费:在所有可以对字符串进行排序的方法中,她会选择使她获得的金币数量最少的那一种。

Catherine de' Medici 也喜欢字符串。她有一个长度为 $n$ 的字符串,并且想用它来玩游戏。具体来说,她对以下操作感兴趣:

  • 1 i c” —— 将 $s[i]$ 替换为 $c$;
  • 2 i j” —— 复制字符串 $s$ 中从第 $i$ 个到第 $j$ 个字符(含)的子串($i \le j$)并对其进行排序,而字符串 $s$ 的字符保持不变。
  • 3 i j” —— 提取字符串 $s$ 中从第 $i$ 个到第 $j$ 个字符(含)的子串($i \le j$),对其进行排序,然后将其插回字符串 $s$ 的相同位置。

Catherine de' Medici 自己可以处理第一种类型的询问,但第二种和第三种类型的询问太复杂了,她会去找 Cleopatra 帮忙。在评估此过程的费用时,Cleopatra 累加的不是字符串 $s$ 中的索引(从 $i$ 到 $j$),而是相对于子串开头的索引(从 $1$ 到 $j - i + 1$)。

Catherine de' Medici 同样不浪费,并且仔细监控着她的预算。因此,对于她向 Cleopatra 提出的每个请求,请计算 Catherine de' Medici 需要花费多少金币。

输入格式

输入的第一行包含一个整数 $t$ —— 测试用例的数量($1 \le t \le 3 \cdot 10^5$)。对于每个测试用例:

第一行包含两个整数 $n$ 和 $q$ —— 字符串的长度和询问的数量($1 \le n, q \le 3 \cdot 10^5$)。

下一行包含一个由 $n$ 个大写英文字母组成的字符串。

接下来的 $q$ 行描述询问。每个询问的描述为以下三种类型之一:

  • 1 i c” —— 将 $s[i]$ 替换为 $c$($1 \le i \le n$;$c \in \{\text{A}, \text{B}, \dots, \text{Z}\}$);
  • 2 i j” —— 求对子串 $s[i..j]$ 进行排序的费用,同时字符串 $s$ 保持不变($1 \le i, j \le n$);
  • 3 i j” —— 求对子串 $s[i..j]$ 进行排序的费用,同时字符串 $s$ 中的子串 $s[i..j]$ 被替换为排序后的子串($1 \le i, j \le n$)。

在每个测试用例中,将至少包含一个第二种或第三种类型的询问。

所有测试用例中 $n$ 的总和不超过 $3 \cdot 10^5$。所有测试用例中 $q$ 的总和不超过 $3 \cdot 10^5$。

输出格式

对于每个测试用例,在单独的行中输出所有第二种和第三种类型询问的答案,即 Cleopatra 每次排序将获得的金币数量。

样例

输入样例 1

1
5 20
DBCAA
2 1 5
2 2 4
1 3 Z
2 1 3
3 1 5
2 1 5
1 5 A
3 2 4
2 1 5
1 1 C
2 1 2
3 4 5
2 3 5
1 2 B
2 1 5
3 1 1
2 1 1
1 4 D
2 1 5
3 1 5

输出样例 1

18
3
1
16
0
0
7
1
1
1
9
0
0
3
3
3

输入样例 2

3
3 5
CBA
2 1 3
3 1 3
2 1 3
1 2 C
2 1 2
5 5
ABCDE
2 2 5
1 5 A
2 1 5
3 1 5
2 1 5
6 5
YYYYYY
2 1 6
1 3 A
2 1 6
3 2 5
2 1 6

输出样例 2

4
4
0
0
0
9
9
0
0
3
1
1

说明

考虑第一个样例。在其中,初始字符串为 “DBCAA”。让我们按顺序查看所有 20 个询问:

  1. 询问 “2 1 5”。当前字符串:“DBCAA”。子串 $t[1..5]$ = “DBCAA”,答案:18。字符串不改变。
  2. 询问 “2 2 4”。字符串:“DBCAA”。子串 $t[2..4]$ = “BCA”,答案:3。字符串不改变。
  3. 询问 “1 3 Z”。更新:$t[3] \leftarrow$ “Z”。原为 “DBCAA”,现为 “DBZAA”。
  4. 询问 “2 1 3”。字符串:“DBZAA”。子串 $t[1..3]$ = “DBZ”,答案:1。字符串不改变。
  5. 询问 “3 1 5”。字符串:“DBZAA”。子串 $t[1..5]$ = “DBZAA”,答案:16。变化后,对子串进行排序:“DBZAA” $\rightarrow$ “AABDZ”。字符串变为 “AABDZ”。
  6. 询问 “2 1 5”。字符串:“AABDZ”。子串 “AABDZ”,答案:0。字符串不改变。
  7. 询问 “1 5 A”。原为 “AABDZ”,现为 “AABDA”。
  8. 询问 “3 2 4”。字符串:“AABDA”。子串 $t[2..4]$ = “ABD”,答案:0。排序后 “ABD” 不改变,字符串保持为 “AABDA”。
  9. 询问 “2 1 5”。字符串:“AABDA”。子串 “AABDA”,答案:7。字符串不改变。
  10. 询问 “1 1 C”。原为 “AABDA”,现为 “CABDA”。
  11. 询问 “2 1 2”。字符串:“CABDA”。子串 $t[1..2]$ = “CA”,答案:1。字符串不改变。
  12. 询问 “3 4 5”。字符串:“CABDA”。子串 $t[4..5]$ = “DA”,答案:1。变化后:“DA” $\rightarrow$ “AD”。字符串变为 “CABAD”。
  13. 询问 “2 3 5”。字符串:“CABAD”。子串 $t[3..5]$ = “BAD”,答案:1。字符串不改变。
  14. 询问 “1 2 B”。原为 “CABAD”,现为 “CBBAD”。
  15. 询问 “2 1 5”。字符串:“CBBAD”。子串 “CBBAD”,答案:9。字符串不改变。
  16. 询问 “3 1 1”。字符串:“CBBAD”。子串 $t[1..1]$ = “C”,答案:0。对长度为 1 的子串进行排序不会改变任何内容,字符串保持为 “CBBAD”。
  17. 询问 “2 1 1”。字符串:“CBBAD”。子串 $t[1..1]$ = “C”,答案:0。字符串不改变。
  18. 询问 “1 4 D”。原为 “CBBAD”,现为 “CBBDD”。
  19. 询问 “2 1 5”。字符串:“CBBDD”。子串 $t[1..5]$ = “CBBDD”,答案:3。字符串不改变。
  20. 询问 “3 1 5”。字符串:“CBBDD”。子串 $t[1..5]$ = “CBBDD”,答案:3。变化后:“CBBDD” $\rightarrow$ “BBCDD”。最终字符串为 “BBCDD”。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1214EditorialOpen题解jiangly2026-03-06 00:36:24View

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.