QOJ.ac

QOJ

시간 제한: 2.0 s 메모리 제한: 256 MB 총점: 100 해킹 가능 ✓

#15614. Busy Beaver's Dam Logs

통계

Busy Beaver 在一排中排列了 $N$ 根木头来作为他大坝的基底。每根木头都有一个介于 $-2$ 和 $2$ 之间的整数质量值。不时地,一些木头会被替换。他偶尔想知道是否存在一个连续的木头段,其总质量等于给定的非零数 $X$,并且可能还想知道这个片段的具体位置。请帮助 Busy Beaver 高效地处理所有的修改和查询。

输入格式

第一行包含一个整数 $T$ ($1 \le T \le 10^4$) —— 测试用例的数量。

每个测试用例的第一行包含两个整数 $N$ 和 $Q$ ($1 \le N, Q \le 2 \cdot 10^5$) —— 分别表示数组的大小和查询的数量。

每个测试用例的第二行包含 $N$ 个整数 $a_1, a_2, \dots, a_N$ ($-2 \le a_i \le 2$) —— 木头的初始质量。

接下来的 $Q$ 行,每行代表一个查询,格式为以下两种之一:

  • 1 i x ($1 \le i \le N$, $-2 \le x \le 2$) — 将第 $i$ 根木头的质量修改为 $x$。
  • 2 X ($-2N \le X \le 2N$, $X \neq 0$) — 寻找一个总质量为 $X$ 的连续木头段。

保证至少存在一个第二种类型的查询。

所有测试用例中 $N$ 的总和不超过 $2 \cdot 10^5$。

所有测试用例中 $Q$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个第二种类型的查询,如果存在满足条件的连续段,则在第一行输出 YES,紧接着在下一行输出该段的左右端点索引 $l$ 和 $r$ ($1 \le l \le r \le N$)。如果不存在这样的段,则在单行中输出 NO

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

子任务

本题共有四个子任务。如果你的 YES/NO 回答正确,但输出的区间端点不正确,你将获得每个子任务 50% 的分数。为了获得这部分分数,在所有输出 YES 的情况下,你仍然必须在下一行输出介于 $1$ 和 $N$ 之间的整数 $l$ 和 $r$。

  • (10 分):所有测试用例中 $N$ 的总和最大为 $10^3$,且所有测试用例中 $Q$ 的总和最大为 $10^3$。
  • (20 分):对于所有的 $i$,$-1 \le a_i \le 1$,且对于任何第一种类型的查询,$-1 \le x \le 1$。
  • (30 分):对于所有的 $i$,$0 \le a_i \le 2$,且对于任何第一种类型的查询,$0 \le x \le 2$。
  • (40 分):无附加限制。

样例

输入样例 1

4
5 5
-1 2 0 -2 1
1 2 1
2 1
1 4 2
2 3
2 -2
4 3
-1 -1 -1 -1
1 4 1
2 -1
2 -4
6 6
1 -1 1 -1 1 -1
1 3 0
2 1
2 -2
2 3
1 3 2
2 1
6 3
0 0 0 0 0 0
2 2
1 1 1
2 1

输出样例 1

YES
2 2
YES
3 5
NO
YES
2 2
NO
YES
1 1
YES
2 4
NO
YES
1 1
NO
YES
1 1

说明

对于第一个测试用例:

  • 初始数组为 $[-1, 2, 0, -2, 1]$。
  • 在第一次查询 1 2 1 之后,数组变为 $[-1, 1, 0, -2, 1]$。
  • 第二次查询 2 1 要求寻找一个和为 $1$ 的连续段,这可以通过 $[1]$(第 $2$ 个元素)来实现。
  • 在第三次查询 1 4 2 之后,数组变为 $[-1, 1, 0, 2, 1]$。
  • 第四次查询 2 3 要求寻找一个和为 $3$ 的连续段,这可以通过 $[1, 0, 2]$(第 $2$ 到 $4$ 个元素)来实现。
  • 第五次查询 2 -2 要求寻找一个和为 $-2$ 的连续段。可以验证不存在这样的子数组。

对于第二个测试用例:

  • 初始数组为 $[-1, -1, -1, -1]$。
  • 在第一次查询 1 4 1 之后,数组变为 $[-1, -1, -1, 1]$。
  • 第二次查询 2 -1 要求寻找一个和为 $-1$ 的连续段,这可以通过 $[-1]$(前三个元素中的任意一个)来实现。
  • 第三次查询 2 -4 要求寻找一个和为 $-4$ 的连续段。可以验证不存在这样的子数组。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.