CF1676F Longest Strike
题目描述
给定一个长度为 $n$ 的数组 $a$ 和一个整数 $k$,请你找到任意一对整数 $l$ 和 $r$($l \leq r$),使得:
- 对于每个 $x$ 满足 $l \leq x \leq r$,$x$ 在数组 $a$ 中至少出现了 $k$ 次(即数组中有不少于 $k$ 个元素等于 $x$)。
- $r-l$ 的值最大。
如果不存在满足条件的数对,请输出 $-1$。
例如,若 $a=[11, 11, 12, 13, 13, 14, 14]$ 且 $k=2$,则:
- 对于 $l=12$,$r=14$,第一个条件不成立,因为 $12$ 在数组中没有出现至少 $k=2$ 次。
- 对于 $l=13$,$r=14$,第一个条件成立,因为 $13$ 在数组中至少出现了 $k=2$ 次,$14$ 也至少出现了 $k=2$ 次。
- 对于 $l=11$,$r=11$,第一个条件成立,因为 $11$ 在数组中至少出现了 $k=2$ 次。
使第一个条件成立且 $r-l$ 最大的数对为 $l=13$,$r=14$。
输入格式
输入的第一行包含一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 $n$ 和 $k$($1 \le n \le 2 \cdot 10^5$,$1 \leq k \leq n$),分别表示数组 $a$ 的长度和区间 $[l, r]$ 内每个数至少出现的次数。
接下来一行包含 $n$ 个整数,表示数组 $a$($1 \leq a_i \leq 10^9$)。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,输出一行,包含两个整数 $l$ 和 $r$,表示满足条件的区间端点。如果不存在满足条件的区间,输出 $-1$。
如果有多组答案,输出任意一组均可。
说明/提示
由 ChatGPT 4.1 翻译