编程题
### 问题描述 小明得到了一个长度为 $n$ 的字符串 $s$ ,该字符串都是由数字 $0$ 和 $1$ 组成,并且下标从 $1$ 开始,小明现在需要对这个字符串进行 $q$ 次操作,每次操作包含以下两种操作之一: - 操作 $1$ :小明查询该字符串中第一次出现 $1$ 的位置,并将其输出,**如果字符串中不存在 $1$ 则输出 $-1$** 。 - 操作 $2$ :小明选择一个下标,将字符串 $s$ 中对应该下标的值反转,即 $1$ 变为 $0$ ,$0$ 变为 $1$ 。 小明想在短时间内快速计算出每次操作二的值,你能帮帮他吗。 ### 输入格式 第一行,包含两个正整数 $n,q$ $(1\leq n,q\leq 2\times 10^5)$ ,代表字符串的长度。 第二行,一个字符串 $s$ $(1\leq |s|\leq n)$ ,代表输入的字符串。 接下来 $q$ 行,每行输入格式为一下之一: - `1` ,代表将字符串中下标为 $x$ 的字符反转。 - `2 x` ,代表小明要查询该字符串中第一次出现 $1$ 的位置,并将其输出。 ### 输出格式 对于每个操作 $2$ ,小明都会输出一行,包含一个正整数,代表该字符串中第一次出现 $1$ 的位置,**如果字符串中不存在 $1$ 则输出 $-1$** 。 ### 输入样例 ``` 6 5 010011 1 2 2 1 2 6 1 ``` ### 输出样例 ``` 2 5 5 ``` ### 样例说明 样例中: 小明的第一次操作是查询,我们可以得到字符串 “010011” 中第一次出现 ‘1’ 的位置为 $2$ 。 小明的第二次操作将下标为 $2$ 的字符反转,此时字符串变为 “000011” 。 小明的第三次操作是查询,我们可以得到字符串 “000011” 中第一次出现 ‘1’ 的位置为 $5$ 。 小明的第四次操作是将下标为 $6$ 的字符反转,此时字符串变为 “000010” 。 小明的第五次操作是查询,我们可以得到字符串 “000010” 中第一次出现 ‘1’ 的位置为 $5$ 。
查看答案
赣ICP备20007335号-2