CF2143F.Increasing Xor
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
你收到了一个神奇的整数序列:a1,a2,…,an。然而,这不是一个普通的序列,它可以以一种特定的方式自我修改!
经过仔细观察,你发现了它遵循的规则:
- 你可以反复选择任意两个下标 1≤i≤j≤n。
- 接着,将第 j 位的值更新为:aj←aj⊕ai。∗
你害怕严格递增的序列,于是开始自问:
你会收到 q 个询问。每个询问给出两个整数 l 和 r,你需要判断子数组 al,al+1,…,ar 在仅允许在 l 到 r 范围内(即仅用 l≤i≤j≤r 的下标)执行上述操作任意多次后,能否变为一个严格递增的序列。
∗⊕ 表示按位异或操作。
输入格式
每组测试数据包含多个测试用例。第一行包含测试用例数 t(1≤t≤104)。测试用例的描述如下。
每组测试用例的第一行包含两个整数 n 和 q(1≤n,q≤2⋅105),表示序列的长度和询问的个数。
第二行包含 n 个整数 a1,a2,…,an(1≤ai<220),表示序列的内容。
接下来的 q 行,每行包含两个整数 l 和 r(1≤l≤r≤n),表示一个询问。你需要判断子数组 al,al+1,…,ar 能否通过允许的操作变成严格递增序列。
保证所有测试用例中的 n 总和不超过 2⋅105,q 总和不超过 2⋅105。
输出格式
对于每个询问,如果子数组 al,al+1,…,ar 能通过允许的操作变成严格递增序列,输出 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,2],同样已经递增,无需操作。
对于第三个询问,序列为 [1,2,2],它不是严格递增的,因此需要做操作。如果选择 i=1,j=3,执行 a3←a3⊕a1,得到 [1,2,3],已经严格递增,因此答案为 YES。
对于第四个询问,序列为 [1,2,2,1]。我们可以按如下操作:
- a2←a2⊕a2(i=2,j=2),得到 [1,0,2,1]。
- a4←a4⊕a3(i=3,j=4),得到 [1,0,2,3]。
- a2←a2⊕a1(i=1,j=2),得到 [1,1,2,3]。
- a1←a1⊕a1(i=1,j=1),得到 [0,1,2,3],为严格递增序列。
在第二个测试用例中:
对于第一个询问,无法变为严格递增。
对于第二个询问,序列为 [1],已经严格递增,无需操作。
对于第三个询问,序列为 [1,1]。我们可以令 i=j=2,执行 a2←a2⊕a2,使 a2=0,区间变为 [0,1],是严格递增序列。
对于最后一个询问,可以按如下顺序操作:
- a6←a6⊕a5
- a7←a7⊕a5
- a5←a5⊕a5
最终区间 [5,8] 变为 [0,1,2,3],是严格递增序列。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?