309766: CF1732C2. Sheikh (Hard Version)

Memory Limit:256 MB Time Limit:4 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

Sheikh (Hard Version)

题意翻译

Feyn 有一个数列,他定义了一个数列的价值是数列的总和减去所有元素的异或和。 小 C 有很多个询问,每个询问形如 $L_i,R_i$,含义是希望找到一个区间 $[l,r]$,满足 $L_i\le l\le r\le R_i$,使得这个区间的价值最大。但是她不喜欢麻烦,所以希望输出所有价值最大的区间中最短的一个(如果有多个最短输出任意一种)。 多组数据。$\sum n=\sum q\le 2\times 10^5,a_i\le 10^9$。

题目描述

This is the hard version of the problem. The only difference is that in this version $ q = n $ . You are given an array of integers $ a_1, a_2, \ldots, a_n $ . The cost of a subsegment of the array $ [l, r] $ , $ 1 \leq l \leq r \leq n $ , is the value $ f(l, r) = \operatorname{sum}(l, r) - \operatorname{xor}(l, r) $ , where $ \operatorname{sum}(l, r) = a_l + a_{l+1} + \ldots + a_r $ , and $ \operatorname{xor}(l, r) = a_l \oplus a_{l+1} \oplus \ldots \oplus a_r $ ( $ \oplus $ stands for [bitwise XOR](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)). You will have $ q $ queries. Each query is given by a pair of numbers $ L_i $ , $ R_i $ , where $ 1 \leq L_i \leq R_i \leq n $ . You need to find the subsegment $ [l, r] $ , $ L_i \leq l \leq r \leq R_i $ , with maximum value $ f(l, r) $ . If there are several answers, then among them you need to find a subsegment with the minimum length, that is, the minimum value of $ r - l + 1 $ .

输入输出格式

输入格式


Each test consists of multiple test cases. The first line contains an integer $ t $ ( $ 1 \leq t \leq 10^4 $ ) — the number of test cases. The description of test cases follows. The first line of each test case contains two integers $ n $ and $ q $ ( $ 1 \leq n \leq 10^5 $ , $ q = n $ ) — the length of the array and the number of queries. The second line of each test case contains $ n $ integers $ a_1, a_2, \ldots, a_n $ ( $ 0 \leq a_i \leq 10^9 $ ) — array elements. $ i $ -th of the next $ q $ lines of each test case contains two integers $ L_i $ and $ R_i $ ( $ 1 \leq L_i \leq R_i \leq n $ ) — the boundaries in which we need to find the segment. It is guaranteed that the sum of $ n $ over all test cases does not exceed $ 2 \cdot 10^5 $ . It is guaranteed that $ L_1 = 1 $ and $ R_1 = n $ .

输出格式


For each test case print $ q $ pairs of numbers $ L_i \leq l \leq r \leq R_i $ such that the value $ f(l, r) $ is maximum and among such the length $ r - l + 1 $ is minimum. If there are several correct answers, print any of them.

输入输出样例

输入样例 #1

6
1 1
0
1 1
2 2
5 10
1 2
2 2
3 3
0 2 4
1 3
1 2
2 3
4 4
0 12 8 3
1 4
1 3
2 4
2 3
5 5
21 32 32 32 10
1 5
1 4
1 3
2 5
3 5
7 7
0 1 0 1 0 1 0
1 7
3 6
2 5
1 4
4 7
2 6
2 7

输出样例 #1

1 1
1 1
2 2
1 1
1 1
2 2
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
3 4
2 4
4 6
2 4
2 4
4 6
2 4
2 4

说明

In all test cases, the first query is considered. In the first test case, $ f(1, 1) = 0 - 0 = 0 $ . In the second test case, $ f(1, 1) = 5 - 5 = 0 $ , $ f(2, 2) = 10 - 10 = 0 $ . Note that $ f(1, 2) = (10 + 5) - (10 \oplus 5) = 0 $ , but we need to find a subsegment with the minimum length among the maximum values of $ f(l, r) $ . So, only segments $ [1, 1] $ and $ [2, 2] $ are the correct answers. In the fourth test case, $ f(2, 3) = (12 + 8) - (12 \oplus 8) = 16 $ . There are two correct answers in the fifth test case, since $ f(2, 3) = f(3, 4) $ and their lengths are equal.

Input

题意翻译

Feyn 有一个数列,他定义了一个数列的价值是数列的总和减去所有元素的异或和。 小 C 有很多个询问,每个询问形如 $L_i,R_i$,含义是希望找到一个区间 $[l,r]$,满足 $L_i\le l\le r\le R_i$,使得这个区间的价值最大。但是她不喜欢麻烦,所以希望输出所有价值最大的区间中最短的一个(如果有多个最短输出任意一种)。 多组数据。$\sum n=\sum q\le 2\times 10^5,a_i\le 10^9$。

Output

**题目大意:**

Feyn有一个数列,数列的价值定义为数列的总和减去所有元素的异或和。小C有多个询问,每个询问由一对数字$ L_i, R_i $组成,需要找到一个区间$ [l,r] $,满足$ L_i \le l \le r \le R_i $,使得这个区间的价值最大。如果有多个区间具有最大价值,则输出其中最短的一个(如果有多个最短区间,输出任意一个)。

题目保证所有测试案例中$ n $的总和不超过$ 2 \times 10^5 $,数列中的每个元素$ a_i \le 10^9 $。

**输入输出数据格式:**

**输入格式:**
- 第一行包含一个整数$ t $($ 1 \le t \le 10^4 $),表示测试案例的数量。
- 每个测试案例的第一行包含两个整数$ n $和$ q $($ 1 \le n \le 10^5 $,$ q = n $),分别表示数组的长度和询问的数量。
- 每个测试案例的第二行包含$ n $个整数$ a_1, a_2, \ldots, a_n $($ 0 \le a_i \le 10^9 $),表示数组的元素。
- 接下来的$ q $行,每行包含两个整数$ L_i $和$ R_i $($ 1 \le L_i \le R_i \le n $),表示需要找到的区间的边界。

**输出格式:**
- 对于每个测试案例,输出$ q $对数字$ L_i \le l \le r \le R_i $,使得价值$ f(l, r) $最大,并且在所有最大价值的区间中长度$ r - l + 1 $最小。如果有多个正确答案,输出其中任意一个。

**输入输出样例:**

**输入样例 #1:**
```
6
1 1
0
1 1
2 2
5 10
1 2
2 2
3 3
0 2 4
1 3
1 2
2 3
4 4
0 12 8 3
1 4
1 3
2 4
2 3
5 5
21 32 32 32 10
1 5
1 4
1 3
2 5
3 5
7 7
0 1 0 1 0 1 0
1 7
3 6
2 5
1 4
4 7
2 6
2 7
```

**输出样例 #1:**
```
1 1
1 1
2 2
1 1
1 1
2 2
2 3
2 3
2 3
2 3
2 3
2 3
2 3
3 4
2 4
4 6
2 4
2 4
4 6
2 4
2 4
```**题目大意:** Feyn有一个数列,数列的价值定义为数列的总和减去所有元素的异或和。小C有多个询问,每个询问由一对数字$ L_i, R_i $组成,需要找到一个区间$ [l,r] $,满足$ L_i \le l \le r \le R_i $,使得这个区间的价值最大。如果有多个区间具有最大价值,则输出其中最短的一个(如果有多个最短区间,输出任意一个)。 题目保证所有测试案例中$ n $的总和不超过$ 2 \times 10^5 $,数列中的每个元素$ a_i \le 10^9 $。 **输入输出数据格式:** **输入格式:** - 第一行包含一个整数$ t $($ 1 \le t \le 10^4 $),表示测试案例的数量。 - 每个测试案例的第一行包含两个整数$ n $和$ q $($ 1 \le n \le 10^5 $,$ q = n $),分别表示数组的长度和询问的数量。 - 每个测试案例的第二行包含$ n $个整数$ a_1, a_2, \ldots, a_n $($ 0 \le a_i \le 10^9 $),表示数组的元素。 - 接下来的$ q $行,每行包含两个整数$ L_i $和$ R_i $($ 1 \le L_i \le R_i \le n $),表示需要找到的区间的边界。 **输出格式:** - 对于每个测试案例,输出$ q $对数字$ L_i \le l \le r \le R_i $,使得价值$ f(l, r) $最大,并且在所有最大价值的区间中长度$ r - l + 1 $最小。如果有多个正确答案,输出其中任意一个。 **输入输出样例:** **输入样例 #1:** ``` 6 1 1 0 1 1 2 2 5 10 1 2 2 2 3 3 0 2 4 1 3 1 2 2 3 4 4 0 12 8 3 1 4 1 3 2 4 2 3 5 5 21 32 32 32 10 1 5 1 4 1 3 2 5 3 5 7 7 0 1 0 1 0 1 0 1 7 3 6 2 5 1 4 4 7 2 6 2 7 ``` **输出样例 #1:** ``` 1 1 1 1 2 2 1 1 1 1 2 2 2 3 2 3 2 3 2 3 2 3 2 3 2 3 3 4 2 4 4 6 2 4 2 4 4 6 2 4 2 4 ```

加入题单

算法标签: