CF1993D.Med-imize
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定两个正整数 n 和 k,以及一个包含 n 个整数的数组 a。
每次操作,你可以选择 a 的任意一个长度为 k 的子数组,然后将其从数组中移除,且不改变其他元素的顺序。更正式地说,设 (l,r) 表示对子数组 al,al+1,…,ar 的一次操作,且 r−l+1=k,那么执行该操作后,a 会变为 [a1,…,al−1,ar+1,…,an]。
例如,若 a=[1,2,3,4,5],对其执行操作 (3,5) 后,数组变为 a=[1,2]。同理,操作 (2,4) 后变为 a=[1,5],操作 (1,3) 后变为 a=[4,5]。
你需要重复上述操作,直到数组 a 的长度不大于 k(即 ∣a∣≤k)为止。请问,经过这一过程后,所有可能剩下的 a 的元素中,最大的中位数是多少?
† 一个长度为 n 的数组的中位数是将其元素按非降序排列后,下标为 ⌊(n+1)/2⌋ 的元素。例如:median([2,1,5,4,3])=3,median([5])=5,median([6,8,2,4])=4。
输入格式
第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 k(1≤n,k≤5⋅105)。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示数组 a。
保证所有测试用例中 n 的总和不超过 5⋅105。
输出格式
对于每个测试用例,输出一个整数,表示经过操作后可能得到的最大中位数。
输入输出样例
输入#1
5 4 3 3 9 9 2 5 3 3 2 5 6 4 7 1 5 9 2 6 5 4 6 8 2 7 1 2 6 8 3 4 5 4 5 3 4 5 6
输出#1
3 4 9 6 4
说明/提示
在第一个测试用例中,你可以选择子数组 (l,r),即 (1,3) 或 (2,4)。因此,最终可能得到的数组为 [3] 或 [2]。前者的中位数更大(3>2),所以答案是 3。
在第二个测试用例中,最终可能得到的数组为 [6,4]、[3,4] 和 [3,2]。它们的中位数分别为 4、3 和 2。答案为 4。
在第三个测试用例中,最终只会剩下一个元素,可以是初始数组中的任意一个元素。最大值为 9,所以答案为 9。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?