每次测试时间限制:3 秒
内存限制:512 兆字节
题目描述
这是该问题的简单版本。唯一的不同是,在这个版本中,你只需要针对最大子中位数找到一个子数组。
只有当问题的两个版本都解决后,你才能进行 hack。
一个整数 v 是长度为 m 的数组 b 的中位数,当且仅当:
- v 至少大于等于数组中的 ⌈2m⌉ 个元素,并且
- v 至少小于等于数组中的 ⌈2m⌉ 个元素。
例如:
- [9,3,7] 的唯一中位数是 7,
- [5,3,7,9] 的中位数是 5、6 和 7,
- [2,2,2] 的唯一中位数是 2。
你被给定一个整数 k 和一个数组 a1,…,an,数组元素在 1 到 n 之间。
如果一个整数 v(1≤v≤n)满足:存在至少一对下标 (l,r) 使得
- 1≤l≤r≤n,
- r−l+1≥k,
- v 是子数组 [al,…,ar] 的一个中位数,
则称 v 为子中位数。
可以证明至少存在一个子中位数。请找出最大的子中位数 vmax,并给出任意一个对应的子数组下标 (l,r)。
输入
每个测试点包含多个测试用例。第一行包含一个整数 t(1≤t≤50000)——测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 k(1≤k≤n≤300000)。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)。
保证所有测试用例的 n 之和不超过 300000。
输出
对于每个测试用例,输出三个整数 vmax、l 和 r —— 最大的子中位数 vmax,以及一个长度至少为 k(即 r−l+1≥k)的子数组的边界,使得 vmax 是该子数组的一个中位数。
如果有多个解,输出任意一个。
示例
输入
7
4 3
4 1 2 4
5 2
1 2 3 2 1
5 3
1 2 3 2 1
5 3
1 1 2 5 3
1 1
1
2 1
2 1
4 1
1 2 1 3
输出
4 1 4
3 3 4
2 2 4
3 3 5
1 1 1
2 1 2
3 4 4
注释
在第一个测试用例中,长度至少为 k=3 的子数组有:
- (l=1,r=3):[4,1,2],唯一中位数是 2,
- (l=2,r=4):[1,2,4],唯一中位数是 2,
- (l=1,r=4):[4,1,2,4],中位数是 2、3 和 4。
在第二个测试用例中,一个可能的输出是 (l=3,r=4),其中位数是 2 和 3。
注意,可以证明没有长度至少为 2 的子数组能使得 4 或 5 成为中位数。