P12667 [KOI 2023 Round 2] 傻瓜锁
题目背景
试题来源:。中文翻译做了少量本土化修改。
按照[署名—非商业性使用—相同方式共享 4.0 协议国际版](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans)进行授权。
题目描述
KOI 国即将举办一场“快速解锁比赛”。你作为参赛者,正在练习解锁的能力。本次比赛所用的锁因为特性特殊,被称为**傻瓜锁**。
傻瓜锁可以用一个由小写英文字母组成的字符串 $S$ 表示。你可以在一次操作中选定 $S$ 中的某个字符,将其修改为**字母表顺序中相邻的字母**。例如,当傻瓜锁的当前状态为 `"ioiaa"` 时,你可以进行以下 8 种操作:
- 将第 1 个字符 `'i'` 改为 `'h'`。
- 将第 1 个字符 `'i'` 改为 `'j'`。
- 将第 2 个字符 `'o'` 改为 `'n'`。
- 将第 2 个字符 `'o'` 改为 `'p'`。
- 将第 3 个字符 `'i'` 改为 `'h'`。
- 将第 3 个字符 `'i'` 改为 `'j'`。
- 将第 4 个字符 `'a'` 改为 `'b'`。
- 将第 5 个字符 `'a'` 改为 `'b'`。
傻瓜锁具有如下特性:**当字符串中字符按照字母表升序排列时,锁就被解开了**。也就是说,对于任意的 $i$($1 \leq i < |S|$),必须有 $S_i \leq S_{i+1}$。
例如,`"aabbcc"`、`"eel"`、`"a"`、`"zzzzz"` 都是升序排列的;而 `"lee"`、`"ccbbaa"`、`"koi"` 则不是升序排列的。
定义一个傻瓜锁当前状态为字符串 $S$ 时,**将其解锁所需的最小操作次数**,称为该字符串 $S$ 的**难度**。你已经在练习如何快速计算 $S$ 的难度。
现在,你打算通过更难的练习方式来提升自己。
初始时,给定傻瓜锁的状态为字符串 $S$,长度为 $N$。接下来,你将接收到 $Q$ 个**更新操作(query)**,每次操作修改 $S$ 中的某一位字符。每次操作由一个整数 $i$($1 \leq i \leq N$)和一个小写字母 $c$ 组成,表示将 $S$ 中第 $i$ 个字符改为 $c$。这些更新操作需要**按顺序依次应用**。
你的任务是:首先输出初始字符串 $S$ 的难度,之后每处理完一个更新操作,输出更新后字符串 $S$ 的难度。
输入格式
第一行输入字符串 $S$。
第二行输入整数 $Q$,表示操作数量。
若 $Q > 0$,接下来 $Q$ 行,每行输入两个值 $i\ c$,表示将 $S$ 的第 $i$ 个字符改为字符 $c$,两者用空格分隔。
输出格式
总共需输出 $Q + 1$ 个整数,依次为:
- 第 1 行输出初始字符串 $S$ 的难度;
- 若 $Q > 0$,接下来的 $Q$ 行,依次输出每次更新操作后当前字符串 $S$ 的难度。
说明/提示
**限制条件**
- $S$ 由小写英文字母组成。
- $S$ 的长度 $N$ 满足 $1 \leq N \leq 100\,000$。
- $0 \leq Q \leq 100\,000$。
- $1 \leq i \leq N$。
- $c$ 为小写英文字母,且保证 $c$ 不等于更新前 $S$ 的第 $i$ 个字符。
- “小写英文字母”指的是 `"abcdefghijklmnopqrstuvwxyz"`。
**子任务**
1. (7 分)$Q = 0$,$N \leq 5\,000$,且 $S$ 仅由 `'a'`、`'b'` 组成。
2. (6 分)$Q \leq 10$,$S$ 仅由 `'a'`、`'b'` 组成,更新后依然保持只含 `'a'`、`'b'`。
3. (5 分)$Q \leq 10$,$S$ 仅由 `'a'`、`'b'`、`'c'` 组成,更新后依然保持只含这三种字符。
4. (4 分)$Q \leq 10$,$S$ 仅由 `'a'`、`'b'`、`'c'`、`'d'`、`'e'` 组成,更新后依然保持如此。
5. (3 分)$Q \leq 10$。
6. (12 分)$S$ 仅由 `'a'`、`'b'` 组成,更新后依然保持如此。
7. (10 分)$S$ 仅由 `'a'`、`'b'`、`'c'` 组成,更新后依然保持如此。
8. (8 分)$S$ 仅由 `'a'`、`'b'`、`'c'`、`'d'`、`'e'` 组成,更新后依然保持如此。
9. (45 分)无附加限制。
翻译由 ChatGPT-4o 完成