poj2456——最大化最小值

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
const int inf=0x3f3f3f3f;
int a[200000];
bool f(int d)
{
    int last=1;
    for(int i=1;i<m;i++)
    {
        int now=last+1;
        while(now<=n&&a[now]-a[last]<d)
        {
            now++;
        }
        if(now==n+1) return false;
        else last=now;
    }
    return true;
}
int main()
{
    cin>>n>>m;
    int i,j;
    for(i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+1+n);
    int la=0;
    int ua=a[n]-a[1];
    while(ua-la>1)
    {
        int mid=(ua+la)/2;
        if(f(mid)) la=mid;
        else ua=mid;
    }
    cout<<la;
}


版权声明:本文为qq_52115728原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。