题目大意:有一个\(n \times
m\)的矩阵,矩阵的每个位置上可以放置一个数。对于第 i
行,第 i
行的差异定义为该行的最大数和最小数的差。一个矩阵的差异,定义为矩阵中每一行差异的最大值。现在给定
k 个数 v[1..k],问:从这 k 个数中选 \(n\times
m\)个数放入矩阵,能够得到的矩阵的差异最小值是多少。
inlineintjudge(int x) { int i, pd = 0; for (i = 1; i + m - 1 <= k; ++ i) { if (a[i + m - 1] - a[i] <= x) { ++ pd, i = i + m - 1; } } return pd >= n; }
signedmain() { int i; k = read(), n = read(), m = read(); for (i = 1; i <= k; ++ i) a[i] = read(); sort(a + 1, a + k + 1); int l = 0, r = 1e9 + 66, mid;
while (l < r) { mid = (l + r) >> 1; if (judge(mid)) r = mid; else l = mid + 1; }