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 翻译