310543: CF1849C. Binary String Copying

Memory Limit:256 MB Time Limit:2 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

C. Binary String Copyingtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output

You are given a string $s$ consisting of $n$ characters 0 and/or 1.

You make $m$ copies of this string, let the $i$-th copy be the string $t_i$. Then you perform exactly one operation on each of the copies: for the $i$-th copy, you sort its substring $[l_i; r_i]$ (the substring from the $l_i$-th character to the $r_i$-th character, both endpoints inclusive). Note that each operation affects only one copy, and each copy is affected by only one operation.

Your task is to calculate the number of different strings among $t_1, t_2, \ldots, t_m$. Note that the initial string $s$ should be counted only if at least one of the copies stays the same after the operation.

Input

The first line contains a single integer $t$ ($1 \le t \le 10^4$) — the number of test cases.

The first line of each test case contains two integers $n$ and $m$ ($1 \le n, m \le 2 \cdot 10^5$) — the length of $s$ and the number of copies, respectively.

The second line contains $n$ characters 0 and/or 1 — the string $s$.

Then $m$ lines follow. The $i$-th of them contains two integers $l_i$ and $r_i$ ($1 \le l_i \le r_i \le n$) — the description of the operation applied to the $i$-th copy.

The sum of $n$ over all test cases doesn't exceed $2 \cdot 10^5$. The sum of $m$ over all test cases doesn't exceed $2 \cdot 10^5$.

Output

Print one integer — the number of different strings among $t_1, t_2, \ldots, t_m$.

ExampleInput
3
6 5
101100
1 2
1 3
2 4
5 5
1 6
6 4
100111
2 2
1 4
1 3
1 2
1 1
0
1 1
Output
3
3
1
Note

Consider the first example. Copies below are given in order of the input operations. Underlined substrings are substrings that are sorted:

  1. 101100 $\rightarrow$ 011100;
  2. 101100 $\rightarrow$ 011100;
  3. 101100 $\rightarrow$ 101100;
  4. 101100 $\rightarrow$ 101100;
  5. 101100 $\rightarrow$ 000111.

There are three different strings among $t_1, t_2, t_3, t_4, t_5$: 000111, 011100 and 101100.

Consider the second example:

  1. 100111 $\rightarrow$ 100111;
  2. 100111 $\rightarrow$ 001111;
  3. 100111 $\rightarrow$ 001111;
  4. 100111 $\rightarrow$ 010111.

There are three different strings among $t_1, t_2, t_3, t_4$: 001111, 010111 and 100111.

Input

题意翻译

小 C 获得了一个长度为 $ n $ 的 01 串 $ S $。 小 C 有 $ m $ 次操作,每次操作形如 $ [l,r] $,代表将 $ S $ 复制,生成一个 $ S $ 的副本,将副本 $ [l,r] $ 区间内数字字符从小到大排序,第 $ i $ 次操作生成的新串记为 $ S_i $。操作间**互不影响,互相独立**。 求出有多少不同的 $ S_i $。 **多测**,$ t $ 组数据。 $ 1 \le t \le 10^4 $,$ 1 \le \sum n,\sum m \le 2 \times 10^5 $。 感谢@[船酱魔王](/user/420998)提供的翻译。

Output

题目大意:给定一个由字符 '0' 和 '1' 组成的字符串 s,长度为 n。制作 m 个该字符串的副本,记为 t1, t2, ..., tm。然后对每个副本执行恰好一次操作:对于第 i 个副本,对其子串 [li; ri] 进行排序。注意,每个操作仅影响一个副本,且每个副本只受一个操作的影响。任务是计算 t1, t2, ..., tm 中不同字符串的数量。注意,如果至少有一个副本在操作后保持不变,则应计算初始字符串 s。

输入数据格式:
- 第一行包含一个整数 t(1 ≤ t ≤ 10^4),表示测试用例的数量。
- 每个测试用例的第一行包含两个整数 n 和 m(1 ≤ n, m ≤ 2 × 10^5),分别表示字符串 s 的长度和副本的数量。
- 每个测试用例的第二行包含 n 个字符 '0' 和/或 '1',表示字符串 s。
- 接下来的 m 行,每行包含两个整数 li 和 ri(1 ≤ li ≤ ri ≤ n),表示应用于第 i 个副本的操作。

输出数据格式:
- 对于每个测试用例,打印一个整数,表示 t1, t2, ..., tm 中不同字符串的数量。

示例:
输入:
```
3
6 5
101100
1 2
1 3
2 4
5 5
1 6
6 4
100111
2 2
1 4
1 3
1 2
1 1
0
1 1
```
输出:
```
3
3
1
```

注意:在第一个示例中,对于副本的操作如下:
1. 10**1100** → 01**1100**
2. 101**1100** → 011**1100**
3. 1**01100** → 1**01100**
4. 1011**0**0 → 1011**0**0
5. **101100** → **000111**

在第二个示例中,对于副本的操作如下:
1. 1**0**0111 → 1**0**0111
2. **1001**11 → **0011**11
3. **100**111 → **001**111
4. 10**0111** → 01**0111**

在这两个示例中,分别有 3 个和 3 个不同的字符串。题目大意:给定一个由字符 '0' 和 '1' 组成的字符串 s,长度为 n。制作 m 个该字符串的副本,记为 t1, t2, ..., tm。然后对每个副本执行恰好一次操作:对于第 i 个副本,对其子串 [li; ri] 进行排序。注意,每个操作仅影响一个副本,且每个副本只受一个操作的影响。任务是计算 t1, t2, ..., tm 中不同字符串的数量。注意,如果至少有一个副本在操作后保持不变,则应计算初始字符串 s。 输入数据格式: - 第一行包含一个整数 t(1 ≤ t ≤ 10^4),表示测试用例的数量。 - 每个测试用例的第一行包含两个整数 n 和 m(1 ≤ n, m ≤ 2 × 10^5),分别表示字符串 s 的长度和副本的数量。 - 每个测试用例的第二行包含 n 个字符 '0' 和/或 '1',表示字符串 s。 - 接下来的 m 行,每行包含两个整数 li 和 ri(1 ≤ li ≤ ri ≤ n),表示应用于第 i 个副本的操作。 输出数据格式: - 对于每个测试用例,打印一个整数,表示 t1, t2, ..., tm 中不同字符串的数量。 示例: 输入: ``` 3 6 5 101100 1 2 1 3 2 4 5 5 1 6 6 4 100111 2 2 1 4 1 3 1 2 1 1 0 1 1 ``` 输出: ``` 3 3 1 ``` 注意:在第一个示例中,对于副本的操作如下: 1. 10**1100** → 01**1100** 2. 101**1100** → 011**1100** 3. 1**01100** → 1**01100** 4. 1011**0**0 → 1011**0**0 5. **101100** → **000111** 在第二个示例中,对于副本的操作如下: 1. 1**0**0111 → 1**0**0111 2. **1001**11 → **0011**11 3. **100**111 → **001**111 4. 10**0111** → 01**0111** 在这两个示例中,分别有 3 个和 3 个不同的字符串。

加入题单

上一题 下一题 算法标签: