#59714. 最大异或和

    ID: 59714 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>计蒜客赛事普及T2前缀和位运算魔扣OJ

最大异或和

暂无测试数据。

蒜头君有一个长度为 $n$ 的非负整数数列 $a_i$。

现在共有 $q$ 次询问,每次询问会给出三个正整数 $l, r, m$。对于每次询问,蒜头君需要找到一个非负整数 $k$,满足 $k < 2^m$,并且使得数列 $a$ 中区间 $[l, r]$ 内的所有数的异或和再与 $k$ 异或的结果最大,即 $a_l \oplus a_{l+1} \oplus \cdots \oplus a_r \oplus k$ 的结果最大。

对于每次询问,输出 $a_l \oplus a_{l+1} \oplus \cdots \oplus a_r \oplus k$ 的最大异或和。

注:$x\oplus y$ 表示的是 $x$ 异或 $y$,在 C++ 中异或使用^符号。

输入格式

第一行输入两个以空格隔开的正整数 $n,q$,分别表示数列的长度和询问的次数。

第二行输入 $n$ 个以空格隔开的非负整数 $a_i$,数列中的第 $i$ 个数为 $a_i$。

接下来 $q$ 行,每行输入 $3$ 个以空格隔开的正整数 $l,r,m$,表示的每次询问的区间为 $[l,r]$,以及 $k$ 的限制条件 $m$。

输出格式

输出共 $q$ 行,第 $i$ 行输出一个非负整数,表示第 $i$ 个询问的最大异或和。

数据范围

对于 $30\%$ 的数据,$1\leq n,q \leq 1000,m = 1$;

对于另外 $20\%$ 的数据,$1\leq n,q \leq 10^5,m = 1$;

对于另外 $20\%$ 的数据,$1\leq n,q \leq 1000, l = r,2\leq m \leq 31$;

对于 $100\%$ 的数据,$1\leq n,q \leq 10^5,0\leq a_i \leq (2^{31} -1),1\leq l \leq r \leq n,1\leq m \leq 31$。

5 3
1 2 3 4 5
1 3 2
2 4 3
1 5 1
3
7
1
5 4
1 2 0 4 8
1 2 8
2 5 15
3 4 13
1 5 12
255
32767
8191
4095