#CF2126G2. G2. 大胜!(困难版)

G2. 大胜!(困难版)

每个测试的时间限制:44 秒 内存限制:256256 兆字节

题目描述

本题是问题的困难版。两个版本的区别在于,在此版本中 aina_i \le n

给定一个由 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n 组成的数组。

你的任务是找到一个子数组 a[l,r]a[l, r](连续的元素序列 al,al+1,,ara_l, a_{l+1}, \dots, a_r),使得表达式 med(a[l,r])−min(a[l,r]) 的值最大。

其中:

med\text{med} 是子数组的中位数,即子数组排序后位于 k+12\left\lceil \frac{k+1}{2} \right\rceil 位置的元素,这里 kk 是子数组的长度;

min\min 是该子数组的最小元素。

例如,考虑数组 a=[1,4,1,5,3,3]a = [1,4,1,5,3,3],并选择子数组 a[2,5]=[4,1,5,3]a[2,5] = [4,1,5,3]。排序后为 [1,3,4,5][1,3,4,5]

med(a[2,5])=4\text{med}(a[2,5]) = 4,因为 4+12=3\left\lceil \frac{4+1}{2} \right\rceil = 3,排序后第三个元素是 44

min(a[2,5])=1\min(a[2,5]) = 1,因为最小元素是 11。 在此例中,值 medmin=41=3\text{med} - \min = 4 - 1 = 3

输入格式

第一行包含一个整数 tt1t1041 \le t \le 10^4)——测试用例的数量。 每个测试用例的第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5)——数组的长度。 每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ain1 \le a_i \le n)——数组的元素。 保证所有测试用例的 nn 之和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,输出一个整数——所有子数组的 medmin\text{med} - \min 的最大可能值。

5
5
3 2 5 3 1
4
4 1 1 3
7
6 1 3 4 6 2 7
4
4 2 3 1
5
1 2 3 4 5
3
3
5
2
2

##注意

在第一个示例中,考虑数组 a=[3,2,5,3,1]a = [3, 2, 5, 3, 1],你可以选择子数组 a[2,3]a[2, 3],即元素 [2,5][2, 5]。 子数组长度为 22。中位数是排序后位于 32=2\left\lceil \frac{3}{2} \right\rceil = 2 位置的元素。排序后得到 [2,5][2, 5]med=5\text{med} = 5。子数组的最小元素:min=2\min = 2。因此 medmin=52=3\text{med} - \min = 5 - 2 = 3,这是最大答案。

在第二个测试中,数组 a=[4,1,1,3]a = [4, 1, 1, 3],你可以选择子数组 a[1,2]a[1, 2],即元素 [4,1][4, 1]。 子数组长度为 22。中位数是排序后位于第 22 位的元素,排序后 [1,4][1, 4]med=4\text{med} = 4。最小元素 min=1\min = 1。因此 medmin=41=3\text{med} - \min = 4 - 1 = 3

可以证明这两个子数组都是最优的,并且能得到表达式 medmin\text{med} - \min 的最大值。