D. 一二数组

    传统题 文件IO:ones 2000ms 256MiB

一二数组

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

33DAI 拿到了一个只由 11 与 22 组成的数组 a1,a2,…,ana_1, a_2, \dots, a_n。

接下来有 qq 次操作,每次操作是下面两种之一:

  • 1 s:询问是否存在一个连续子数组(即 al,al+1,…,ara_l, a_{l+1}, \dots, a_r,其中 1≤l≤r≤n1 \le l \le r \le n),它的元素之和恰好等于 ss;
  • 2 i v:把 aia_i 的值改成 vv。

对于每个 1 s 询问,请告诉 33DAI 答案是 YES 还是 NO。

输入格式

从文件 ones.in 读入数据。

第一行一个整数 tt,表示测试用例组数。

接下来依次给出 tt 组数据,每组数据的格式为:

  • 第一行两个整数 n,qn, q,表示数组长度与操作次数;
  • 第二行 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n,表示这个数组,每个数都是 11 或 22;
  • 接下来 qq 行,每行是一次操作,格式为 1 s 或 2 i v。

输出格式

输出到文件 ones.out。

对于每个 1 s 询问输出一行:如果存在元素之和恰好等于 ss 的连续子数组,输出 YES;否则输出 NO。

2 i v 操作不产生任何输出。

评测时逐字符比较,大小写必须与样例一致(YES 与 NO 都是全大写)。一个测试用例里的多次询问按输入顺序依次输出,不同测试用例的输出也按顺序首尾相接。

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

样例 1 解释

第 1 组数据里 a=[2,1,2,1,2]a = [2, 1, 2, 1, 2],共有 44 个询问:

  • 询问 s=5s = 5:取子数组 a1,a2,a3a_1, a_2, a_3,元素之和为 2+1+2=52 + 1 + 2 = 5,所以输出 YES;
  • 询问 s=6s = 6:取子数组 a1,a2,a3,a4a_1, a_2, a_3, a_4,元素之和为 2+1+2+1=62 + 1 + 2 + 1 = 6,所以输出 YES;
  • 询问 s=7s = 7:逐个检查所有连续子数组,没有哪一个的元素之和等于 77,所以输出 NO;
  • 接着是修改操作,a4a_4 被改成 22,数组变成 [2,1,2,2,2][2, 1, 2, 2, 2];
  • 询问 s=7s = 7:取子数组 a2,a3,a4,a5a_2, a_3, a_4, a_5,元素之和为 1+2+2+2=71 + 2 + 2 + 2 = 7,所以输出 YES。

第 2 组数据里 a=[2,2,2]a = [2, 2, 2],共有 22 个询问:s=6s = 6 时取整个数组,元素之和为 66,输出 YES;s=5s = 5 时不存在元素之和为 55 的连续子数组(数组里所有元素都是 22),输出 NO。

样例 2

见 ones2.in 与 ones2.ans。

样例 3

见 ones3.in 与 ones3.ans。

数据范围

对于所有测试数据,保证:

  • 1≤t≤1041 \le t \le 10^4;
  • 1≤n,q≤1051 \le n, q \le 10^5;
  • ai∈{1,2}a_i \in \{1, 2\},修改操作里的 v∈{1,2}v \in \{1, 2\};
  • 询问里的 1≤s≤2n1 \le s \le 2n,修改操作里的 1≤i≤n1 \le i \le n;
  • 所有测试用例的 nn 之和与 qq 之和都不超过 10510^5。

子任务

本题共 20 个测试点,按测试点计分:

测试点 分值 每个测试点 特殊限制
1∼61 \sim 6 3030 55 n,q≤2000n, q \le 2000
7∼127 \sim 12 没有修改操作
13∼2013 \sim 20 4040 无额外限制

每个测试点单独评分,全部测试点的得分之和即为本题得分。

【评测】三三信奥国庆模拟赛 CSP-J 第三场

未参加
状态
已结束
规则
OI
题目
4
开始于
2026-10-3 8:30
结束于
2026-10-6 8:30
持续时间
3.5 小时
主持人
参赛人数
19