CF2128E1.Submedians (Easy Version)
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的简单版本。唯一的区别在于,在本版本中,你只需要找到最大子中位数对应的一个子数组。
只有在两个版本都被解决的情况下,你才能进行 hack。
对于长度为 m 的数组 b,整数 v 是 b 的中位数,当且仅当:
- v 至少大于等于数组中 ⌈2m⌉ 个元素,并且
- v 至少小于等于数组中 ⌈2m⌉ 个元素。
例如:
- [9,3,7] 的唯一中位数是 7,
- [5,3,7,9] 的中位数是 5、6 和 7,
- [2,2,2] 的唯一中位数是 2。
现在给定一个整数 k 和一个由 1 到 n 之间的整数构成的数组 a1,…,an。
如果存在至少一对下标 (l,r) 满足:
- 1≤l≤r≤n,
- r−l+1≥k,
- v 是子数组 [al,…,ar] 的中位数,
则称 1 到 n 之间的整数 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 的子数组的区间 [l,r](r−l+1≥k),使得 vmax 是该子数组的中位数之一。
如果有多组解,输出任意一组均可。
输入输出样例
输入#1
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
输出#1
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 作为中位数。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?