CF2128E1.Submedians (Easy Version)

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的简单版本。唯一的区别在于,在本版本中,你只需要找到最大子中位数对应的一个子数组。

只有在两个版本都被解决的情况下,你才能进行 hack。

对于长度为 mm 的数组 bb,整数 vv 是 bb 的中位数,当且仅当:

  • vv 至少大于等于数组中 ⌈m2⌉\lceil \frac{m}{2} \rceil 个元素,并且
  • vv 至少小于等于数组中 ⌈m2⌉\lceil \frac{m}{2} \rceil 个元素。

例如:

  • [9,3,7][9, 3, 7] 的唯一中位数是 77,
  • [5,3,7,9][5, 3, 7, 9] 的中位数是 55、66 和 77,
  • [2,2,2][2, 2, 2] 的唯一中位数是 22。

现在给定一个整数 kk 和一个由 11 到 nn 之间的整数构成的数组 a1,…,ana_1, \ldots, a_n。

如果存在至少一对下标 (l,r)(l, r) 满足:

  • 1≤l≤r≤n1 \leq l \leq r \leq n,
  • r−l+1≥kr - l + 1 \geq k,
  • vv 是子数组 [al,…,ar][a_l, \ldots, a_r] 的中位数,

则称 11 到 nn 之间的整数 vv 是一个子中位数。

可以证明,至少存在一个子中位数。请你找出最大的子中位数 vmax⁡v_{\max},以及任意一组对应的下标对 (l,r)(l, r)。

输入格式

每组测试数据包含多组测试用例。第一行包含测试用例个数 tt(1≤t≤500001 \le t \le 50000)。接下来是每组测试用例的描述。

每组测试用例的第一行包含两个整数 nn 和 kk(1≤k≤n≤3000001 \leq k \leq n \leq 300000)。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤n1 \leq a_i \leq n)。

保证所有测试用例中 nn 的总和不超过 300000300000。

输出格式

对于每组测试用例,输出三个整数 vmax⁡v_{\max}、ll 和 rr,表示最大子中位数 vmax⁡v_{\max} 以及一个长度不少于 kk 的子数组的区间 [l,r][l, r](r−l+1≥kr - l + 1 \geq k),使得 vmax⁡v_{\max} 是该子数组的中位数之一。

如果有多组解,输出任意一组均可。

输入输出样例

  • 输入#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=3k = 3 的子数组有:

  • (l=1,r=3)(l = 1, r = 3):[4,1,2][4, 1, 2],唯一的中位数是 22,
  • (l=2,r=4)(l = 2, r = 4):[1,2,4][1, 2, 4],唯一的中位数是 22,
  • (l=1,r=4)(l = 1, r = 4):[4,1,2,4][4, 1, 2, 4],中位数是 22、33 和 44。

在第二个测试用例中,一种可能的输出是 (l=3,r=4)(l = 3, r = 4),其中中位数是 22 和 33。

注意,可以证明长度至少为 22 的任何子数组都不可能有 44 或 55 作为中位数。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页