CF1896D Ones and Twos
题目描述
给定一个 $1$ 下标的数组 $a$,长度为 $n$,其中每个元素都是 $1$ 或 $2$。
你需要处理 $q$ 个如下两种类型的查询:
- “1 s”:判断是否存在一个 $a$ 的子数组 $^\dagger$,其元素和等于 $s$。
- “2 i v”:将 $a_i$ 修改为 $v$。
$^\dagger$ 如果数组 $b$ 可以通过从数组 $a$ 的开头删除若干(可以为零或全部)元素,并从末尾删除若干(可以为零或全部)元素得到,则 $b$ 是 $a$ 的一个子数组。特别地,数组本身也是它自己的子数组。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试数据组数。每组测试数据描述如下。
每组测试数据的第一行包含两个整数 $n$ 和 $q$($1 \le n, q \le 10^5$),分别表示数组 $a$ 的长度和查询的数量。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($a_i$ 为 $1$ 或 $2$),表示数组 $a$ 的元素。
接下来的 $q$ 行,每行包含若干个整数。第一个整数 $\mathrm{op}$ 为 $1$ 或 $2$。
- 如果 $\mathrm{op} = 1$,后接一个整数 $s$($1 \leq s \leq 2n$)。
- 如果 $\mathrm{op} = 2$,后接两个整数 $i$ 和 $v$($1 \leq i \leq n$,$v$ 为 $1$ 或 $2$)。
保证所有测试数据中 $n$ 的总和与 $q$ 的总和均不超过 $10^5$。
输出格式
对于每个 $\mathrm{op}=1$ 的查询,如果存在一个 $a$ 的子数组,其元素和等于 $s$,输出一行 “YES”,否则输出一行 “NO”。
你可以用任意大小写输出答案。例如,"yEs"、"yes"、"Yes" 和 "YES" 都会被识别为肯定回答。
说明/提示
考虑第一个样例:
- 第一个查询的答案是 “YES”,因为 $a_1+a_2+a_3=2+1+2=5$。
- 第二个查询的答案是 “YES”,因为 $a_1+a_2+a_3+a_4=2+1+2+1=6$。
- 第三个查询的答案是 “NO”,因为无法找到任何子数组,其元素和为 $7$。
- 第四个查询后,数组 $a$ 变为 $[2,1,2,2,2]$。
- 第五个查询的答案是 “YES”,因为 $a_2+a_3+a_4+a_5=1+2+2+2=7$。
由 ChatGPT 4.1 翻译