CF2128E2.Submedians (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

这是该问题的困难版本。唯一的区别在于本版本中,你需要为所有的“子中位数”找到一个对应的子数组。

只有当你解决了两个版本的问题时,才能进行 hack。

对于一个长度为 mm 的数组 bb,如果整数 vv 满足以下条件,则称 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 是一个“子中位数”。

请找出所有的子中位数,并且对于每一个子中位数,给出任意一组对应的下标对 (l,r)(l, r)。

输入格式

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

每个测试用例的第一行包含两个整数 nn 和 kk(1≤k≤n≤300 0001 \leq k \leq n \leq 300\,000)。

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

保证所有测试用例中 nn 的总和不超过 300 000300\,000。

输出格式

对于每个测试用例,按如下格式输出答案。

第一行输出 cc,即子中位数的个数。

接下来的 cc 行中,第 ii 行输出三个整数 viv_i、lil_i、rir_i,满足:

  • ri−li+1≥kr_i - l_i + 1 \geq k,
  • viv_i 是子数组 [ali,…,ari][a_{l_i}, \ldots, a_{r_i}] 的一个中位数。

每个子中位数只需输出一次,即 v1,…,vcv_1, \ldots, v_c 必须互不相同。输出顺序不限。

如果有多种方案,可以输出任意一种。

输入输出样例

  • 输入#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

    3
    2 1 4
    3 1 4
    4 1 4
    3
    1 4 5
    2 1 5
    3 3 4
    1
    2 2 4
    3
    1 1 3
    2 2 4
    3 3 5
    1
    1 1 1
    2
    1 1 2
    2 1 2
    3
    1 1 1
    2 2 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=4,r=5)(l = 4, r = 5):[2,1][2, 1],中位数是 11 和 22,
  • (l=1,r=5)(l = 1, r = 5):唯一的中位数是 22,
  • (l=3,r=4)(l = 3, r = 4):[3,2][3, 2],中位数是 22 和 33。

所有这些子数组的长度都至少为 22。注意可以证明,没有长度至少为 22 的子数组的中位数为 44 或 55。

由 ChatGPT 4.1 翻译

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

首页