CF1849C Binary String Copying
题目描述
给定一个由 $n$ 个字符 $0$ 和/或 $1$ 组成的字符串 $s$。
你需要制作 $m$ 份该字符串的副本,记第 $i$ 个副本为字符串 $t_i$。然后,你对每个副本恰好执行一次操作:对于第 $i$ 个副本,你将其子串 $[l_i, r_i]$(即从第 $l_i$ 个字符到第 $r_i$ 个字符,包含两端)进行排序。注意,每次操作只影响一个副本,每个副本也只被操作一次。
你的任务是计算 $t_1, t_2, \ldots, t_m$ 这 $m$ 个字符串中有多少个不同的字符串。注意,只有当至少有一个副本操作后与原始字符串 $s$ 完全相同时,才需要计入原始字符串 $s$。
输入格式
第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。
每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n, m \le 2 \times 10^5$),分别表示字符串 $s$ 的长度和副本的数量。
第二行包含 $n$ 个字符 $0$ 和/或 $1$,表示字符串 $s$。
接下来 $m$ 行,每行包含两个整数 $l_i$ 和 $r_i$($1 \le l_i \le r_i \le n$),表示对第 $i$ 个副本执行的操作。
所有测试用例中 $n$ 的总和不超过 $2 \times 10^5$。所有测试用例中 $m$ 的总和不超过 $2 \times 10^5$。
输出格式
输出一个整数,表示 $t_1, t_2, \ldots, t_m$ 这 $m$ 个字符串中不同字符串的数量。
说明/提示
以第一个样例为例。下方为按照输入操作顺序得到的副本,带下划线的为被排序的子串:
1. 101100 $\rightarrow$ 011100;
2. 101100 $\rightarrow$ 011100;
3. 101100 $\rightarrow$ 101100;
4. 101100 $\rightarrow$ 101100;
5. 101100 $\rightarrow$ 000111。
在 $t_1, t_2, t_3, t_4, t_5$ 中共有三种不同的字符串:000111、011100 和 101100。
再看第二个样例:
1. 100111 $\rightarrow$ 100111;
2. 100111 $\rightarrow$ 001111;
3. 100111 $\rightarrow$ 001111;
4. 100111 $\rightarrow$ 010111。
在 $t_1, t_2, t_3, t_4$ 中共有三种不同的字符串:001111、010111 和 100111。
由 ChatGPT 4.1 翻译