#792. Ones and Twos(onetwo)

Ones and Twos(onetwo)

读写要求

本题采用文件读写,请在提交代码时使用正确的文件读写方式,否则会导致 RE

输入:onetwo.in

输出:onetwo.out

题目描述

给定一个下标从 11 开始、长度为 nn 的数组 aa,其中每个元素都是 11 或 22。

处理 qq 次询问,询问有以下两种类型:

  • 1 s:判断是否存在一个 aa 的子数组 †^{\dagger},其元素和等于 ss。
  • 2 i v:将 aia_i 修改为 vv。

†^{\dagger} 如果数组 bb 可以通过从数组 aa 的开头删除若干个元素(可以为 00 个或全部),再从末尾删除若干个元素(可以为 00 个或全部)得到,那么称 bb 是 aa 的子数组。特别地,一个数组本身也是自己的子数组。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试数据组数。接下来依次描述每组测试数据。

每组测试数据的第一行包含两个整数 nn 和 qq(1≤n,q≤1051\le n,q\le 10^5),分别表示数组 aa 的长度和询问次数。

每组测试数据的第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n(aia_i 为 11 或 22),表示数组 aa 的元素。

接下来每组测试数据有 qq 行,每行包含若干个整数。第一个整数 op\mathrm{op} 为 11 或 22。

  • 如果 op\mathrm{op} 为 11,则后面跟着一个整数 ss(1≤s≤2n1 \leq s \leq 2n)。
  • 如果 op\mathrm{op} 为 22,则后面跟着两个整数 ii 和 vv(1≤i≤n1 \leq i \leq n,vv 为 11 或 22)。

保证所有测试数据中 nn 的总和不超过 10510^5,qq 的总和也不超过 10510^5。

输出格式

对于每个 op=1\mathrm{op}=1 的询问,如果存在一个 aa 的子数组,其元素和等于 ss,则输出一行 YES,否则输出 NO。

你可以以任意大小写形式输出答案。例如,字符串 yEs、yes、Yes 和 YES 都会被认为是肯定回答。

输入输出样例

2
5 5
2 1 2 1 2
1 5
1 6
1 7
2 4 2
1 7
3 2
2 2 2
1 6
1 5
YES
YES
NO
YES
YES
NO

说明/提示

考虑第一个样例:

  • 第一次询问的答案是 YES,因为 a1+a2+a3=2+1+2=5a_1+a_2+a_3=2+1+2=5。
  • 第二次询问的答案是 YES,因为 a1+a2+a3+a4=2+1+2+1=6a_1+a_2+a_3+a_4=2+1+2+1=6。
  • 第三次询问的答案是 NO,因为无法找到任何一个 aa 的子数组,使其元素和为 77。
  • 第四次询问后,数组 aa 变为 [2,1,2,2,2][2,1,2,2,2]。
  • 第五次询问的答案是 YES,因为 a2+a3+a4+a5=1+2+2+2=7a_2+a_3+a_4+a_5=1+2+2+2=7。