bzoj1734

二分

#include<cstdio>
#include<cctype>
#include<algorithm>
#include<set>
using namespace std;
set<int>s;int c;
set<int>::iterator it;
inline int read(){
    char ch=getchar();int x=0,f=1;
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    return x*f;
}
inline bool check(int x){
    int las=0,tot=0;
    while(tot<c && (it=s.lower_bound(las))!=s.end()){
        tot++;las=*it+x;
    }
    return tot>=c;
}
int main(){
    int n=read();c=read();
    for(int i=1;i<=n;i++)s.insert(read());
    if(s.size()<c)return printf("0"),0;
    int l=1,r=1e9,ans=0;
    while(l<=r){
        int mid=(l+r)>>1;
        if(check(mid))ans=max(ans,mid),l=mid+1;else r=mid-1;
    }
    printf("%d",ans);
    return 0;
}

 

posted @ 2018-07-04 11:39  lnyzo  阅读(85)  评论(0)    收藏  举报