//二分最小值
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn = 100005;
int a[maxn];
int n,c;
bool check(int x)
{
int ans = 1,t = a[0];
for (int i = 1; i < n; ++i)
{
if(a[i] - t >= x)
{
ans++;
t = a[i];
if(ans >= c)
return true;
}
}
return false;
}
int main()
{
scanf("%d%d",&n,&c);
for (int i = 0; i < n; ++i)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int l = 0,r = a[n-1] - a[0];
//printf("%d %d\n",l,r);
while(l <= r)
{
int m = l + (r - l)/2;
if(check(m))
l = m + 1;
else
r = m - 1;
}
printf("%d\n",l - 1);
}
poj2356 二分
最新推荐文章于 2019-09-18 21:06:00 发布