CF1732C2 Sheikh (Hard Version)

题目描述

这是该问题的困难版本。唯一的区别在于本版本中 $q = n$。 给定一个整数数组 $a_1, a_2, \ldots, a_n$。 数组的一个子段 $[l, r]$,$1 \leq l \leq r \leq n$ 的代价定义为 $f(l, r) = \operatorname{sum}(l, r) - \operatorname{xor}(l, r)$,其中 $\operatorname{sum}(l, r) = a_l + a_{l+1} + \ldots + a_r$,$\operatorname{xor}(l, r) = a_l \oplus a_{l+1} \oplus \ldots \oplus a_r$($\oplus$ 表示[按位异或](https://en.wikipedia.org/wiki/Bitwise_operation#XOR))。 你将会有 $q$ 个询问。每个询问由一对数字 $L_i$、$R_i$ 给出,$1 \leq L_i \leq R_i \leq n$。你需要在 $L_i \leq l \leq r \leq R_i$ 的范围内,找到使 $f(l, r)$ 最大的子段 $[l, r]$。如果有多个答案,则在这些答案中选择长度最短的子段,即 $r - l + 1$ 最小的那个。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 $t$($1 \leq t \leq 10^4$)——表示测试用例的数量。每组测试用例的描述如下。 每组测试用例的第一行包含两个整数 $n$ 和 $q$($1 \leq n \leq 10^5$,$q = n$)——数组的长度和询问的数量。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \leq a_i \leq 10^9$)——数组元素。 接下来的 $q$ 行,每行包含两个整数 $L_i$ 和 $R_i$($1 \leq L_i \leq R_i \leq n$)——需要在该区间内查找子段。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。 保证 $L_1 = 1$ 且 $R_1 = n$。

输出格式

对于每组测试用例,输出 $q$ 行,每行输出一对整数 $L_i \leq l \leq r \leq R_i$,使得 $f(l, r)$ 最大,并且在所有最大值中 $r - l + 1$ 最小。如果有多个正确答案,输出其中任意一个即可。

说明/提示

在所有测试用例中,第一组询问需要考虑。 在第一个测试用例中,$f(1, 1) = 0 - 0 = 0$。 在第二个测试用例中,$f(1, 1) = 5 - 5 = 0$,$f(2, 2) = 10 - 10 = 0$。注意 $f(1, 2) = (10 + 5) - (10 \oplus 5) = 0$,但我们需要在最大值中选择长度最短的子段。所以只有区间 $[1, 1]$ 和 $[2, 2]$ 是正确答案。 在第四个测试用例中,$f(2, 3) = (12 + 8) - (12 \oplus 8) = 16$。 在第五个测试用例中,有两个正确答案,因为 $f(2, 3) = f(3, 4)$ 且它们的长度相等。 由 ChatGPT 4.1 翻译