CF1968F Equal XOR Segments
题目描述
我们称一个数组 $x_1,\dots,x_m$ 是有趣的,如果可以将该数组分成 $k>1$ 个部分,使得每一部分的按位异或([bitwise XOR](http://tiny.cc/xor_wiki_eng))结果都相等。
更正式地说,你需要将数组 $x$ 分成 $k$ 个连续的区间,每个元素必须且只属于一个区间。设 $y_1,\dots,y_k$ 分别为每个区间内元素的异或和,则必须满足 $y_1=y_2=\dots=y_k$。
例如,如果 $x = [1, 1, 2, 3, 0]$,你可以这样划分:$[\color{blue}1], [\color{green}1], [\color{red}2, \color{red}3, \color{red}0]$。确实有 $\color{blue}1 = \color{green}1 = \color{red}2 \oplus \color{red}3 \oplus \color{red}0$。
现在给定一个数组 $a_1,\dots,a_n$,你的任务是回答 $q$ 个询问:
- 对于给定的 $l$ 和 $r$,判断子数组 $a_l,a_{l+1},\dots,a_r$ 是否是有趣的。
输入格式
第一行包含一个整数 $t$($1\le t\le 10^4$)——表示测试用例的数量。
每个测试用例的第一行包含两个整数 $n$ 和 $q$($2 \le n \le 2 \cdot 10^5$,$1 \le q \le 2 \cdot 10^5$)——数组的长度和询问的数量。
接下来一行包含 $n$ 个整数 $a_1,\dots,a_n$($0 \le a_i < 2^{30}$)——数组的元素。
接下来的 $q$ 行,每行包含两个整数 $l$ 和 $r$($1 \le l < r \le n$),描述一次询问。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
保证所有测试用例中 $q$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个询问,如果子数组是有趣的,输出 "YES",否则输出 "NO"。
你可以以任意大小写输出 "Yes" 和 "No"(例如,"yES"、"yes"、"Yes" 都是正确答案)。
说明/提示
第一个测试用例的解释:
第一个询问在题目描述中已经给出。
第二个询问需要划分 $[1,2,3]$。一种可能的划分是 $[1,2],[3]$,因为 $1\oplus 2=3$。
可以证明,对于第 3、4、5 个询问,这些子数组都不是有趣的。
由 ChatGPT 4.1 翻译