Problem Statement
You are given an array $a$ of length $n$ and a number $k$.
A subarray is defined as a sequence of one or more consecutive elements of the array. You need to split the array $a$ into $k$ non-overlapping subarrays $b_1, b_2, \dots, b_k$ such that the union of these subarrays equals the entire array. Additionally, you need to maximize the value of $x$, which is equal to the minimum MEX$(b_i)$, for $i \in [1..k]$.
MEX$(v)$ denotes the smallest non-negative integer that is not present in the array $v$.
Input
The first line contains an integer $t$ $(1\leq t\leq 10^4)$ — the number of test cases.
The first line of each test case contains two integers $n$, $k$ $(1\leq k \leq n \leq 2 \cdot 10^5)$ — the length of the array and the number of segments to split the array into.
The second line of each test case contains $n$ integers $a_i$ $(0\leq a_i\leq 10^9)$ — the elements of the array.
It is guaranteed that the sum of $n$ across all test cases does not exceed $2\cdot 10^5$.
Output
For each query, output a single number — the maximum value $x$ such that there exists a partition of the array $a$ into $k$ subarrays where the minimum MEX equals $x$.
Solving
求一个区间的最小MEX值的最大值,考虑二分区间:
二分区间的最小MEX(x),枚举依靠此MEX值能将数组分为多少个子数组,返回cnt >= k
二分判断函数中利用std::bitset模拟,同时优化空间与时间。
|
|