题意:给出n个点的坐标,求一个坐标,使得排序后的第k+1个(a[i]-x)最小。
思路:假设只有三个点[1,2,5],要求最大的(a[i]-x)最小,那就必是取(1+5)/2=3,这样最的a[3]-x会是最小。题目是要求第k小,这里可以求出每个局部区间的最大(a[i]-x),同时这个也是全局的
第k+1大(a[i]-x)。
const int N = 2e5 + 5;
int t;
int a[N];
int main()
{
cin >> t;
int n, k;
while (t--)
{
scanf("%d%d", &n, &k);
f(i, 1, n)scanf("%d", &a[i]);
int l = 1, r = k + 1;
int mx = 2e9;
int res = 0;
while (l <= n - k)
{
int mid = (a[l] + a[r]) / 2;
int nowmx = a[r] - mid;
if (nowmx < mx)
{
mx = nowmx;
res = mid;
}
l++, r++;
}
cout << res << endl;
}
return 0;
}