CF2143F.Increasing Xor

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

你收到了一个神奇的整数序列:a1,a2,…,ana_1, a_2, \ldots, a_n。然而,这不是一个普通的序列,它可以以一种特定的方式自我修改!

经过仔细观察,你发现了它遵循的规则:

  • 你可以反复选择任意两个下标 1≤i≤j≤n1 \leq i \leq j \leq n。
  • 接着,将第 jj 位的值更新为:aj←aj⊕aia_j \leftarrow a_j \oplus a_i。∗^{\text{∗}}

你害怕严格递增的序列,于是开始自问:

你会收到 qq 个询问。每个询问给出两个整数 ll 和 rr,你需要判断子数组 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r 在仅允许在 ll 到 rr 范围内(即仅用 l≤i≤j≤rl \leq i \leq j \leq r 的下标)执行上述操作任意多次后,能否变为一个严格递增的序列。

∗⊕^{\text{∗}}\oplus 表示按位异或操作。

输入格式

每组测试数据包含多个测试用例。第一行包含测试用例数 tt(1≤t≤1041 \leq t \leq 10^4)。测试用例的描述如下。

每组测试用例的第一行包含两个整数 nn 和 qq(1≤n,q≤2⋅1051 \leq n, q \leq 2 \cdot 10^5),表示序列的长度和询问的个数。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai<2201 \leq a_i < 2^{20}),表示序列的内容。

接下来的 qq 行,每行包含两个整数 ll 和 rr(1≤l≤r≤n1 \leq l \leq r \leq n),表示一个询问。你需要判断子数组 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r 能否通过允许的操作变成严格递增序列。

保证所有测试用例中的 nn 总和不超过 2⋅1052 \cdot 10^5,qq 总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个询问,如果子数组 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r 能通过允许的操作变成严格递增序列,输出 YES;否则输出 NO。

你可以用任意大小写输出 YES 或 NO,例如 YES, yES, YeS 都是表示正解的有效输出。

输入输出样例

  • 输入#1

    2
    4 4
    1 2 2 1
    1 1
    1 2
    1 3
    1 4
    8 6
    5 1 1 2 3 2 1 3
    1 8
    2 2
    2 3
    2 6
    4 8
    5 8

    输出#1

    YES
    YES
    YES
    YES
    NO
    YES
    YES
    NO
    NO
    YES

说明/提示

在第一个测试用例中:

对于第一个询问,序列为 [1][1],已经是递增的,无需修改。

对于第二个询问,序列为 [1,2][1, 2],同样已经递增,无需操作。

对于第三个询问,序列为 [1,2,2][1, 2, 2],它不是严格递增的,因此需要做操作。如果选择 i=1,j=3i = 1, j = 3,执行 a3←a3⊕a1a_3 \leftarrow a_3 \oplus a_1,得到 [1,2,3][1, 2, 3],已经严格递增,因此答案为 YES。

对于第四个询问,序列为 [1,2,2,1][1, 2, 2, 1]。我们可以按如下操作:

  1. a2←a2⊕a2(i=2,j=2)a_2 \leftarrow a_2 \oplus a_2 (i = 2, j = 2),得到 [1,0,2,1][1, 0, 2, 1]。
  2. a4←a4⊕a3(i=3,j=4)a_4 \leftarrow a_4 \oplus a_3 (i = 3, j = 4),得到 [1,0,2,3][1, 0, 2, 3]。
  3. a2←a2⊕a1(i=1,j=2)a_2 \leftarrow a_2 \oplus a_1 (i = 1, j = 2),得到 [1,1,2,3][1, 1, 2, 3]。
  4. a1←a1⊕a1(i=1,j=1)a_1 \leftarrow a_1 \oplus a_1 (i = 1, j = 1),得到 [0,1,2,3][0, 1, 2, 3],为严格递增序列。

在第二个测试用例中:

对于第一个询问,无法变为严格递增。

对于第二个询问,序列为 [1][1],已经严格递增,无需操作。

对于第三个询问,序列为 [1,1][1, 1]。我们可以令 i=j=2i = j = 2,执行 a2←a2⊕a2a_2 \leftarrow a_2 \oplus a_2,使 a2=0a_2 = 0,区间变为 [0,1][0, 1],是严格递增序列。

对于最后一个询问,可以按如下顺序操作:

  1. a6←a6⊕a5a_6 \leftarrow a_6 \oplus a_5
  2. a7←a7⊕a5a_7 \leftarrow a_7 \oplus a_5
  3. a5←a5⊕a5a_5 \leftarrow a_5 \oplus a_5

最终区间 [5,8][5, 8] 变为 [0,1,2,3][0, 1, 2, 3],是严格递增序列。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页