只有长度大于等于x的木棍才能切出长度为x的木棍,而可以切出木棍长为x的木棍k条,那么长为x-1的木棍也至少能切除k条,具有单调性,二分找最大值,二分起点为1,终点为原本木棍中的mx;
ans初始为-1只能过90%,我的理解是会存在无解的情况,但题目输出要求是一个非负整数,所有应该将ans初始为0

#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll inf = 1e12;
const int N = 2e5+10;
int n;
ll k,a[N];
bool check(ll x){
    int pos = lower_bound(a,a+n,x)-a;
    ll res = 0;
    for(int i = pos;i < n;i++){
        res += (a[i]/x);
    }
    return res >= k;
}
int main(){
    scanf("%d%lld",&n,&k);
    for(int i = 0;i < n;i++){
        scanf("%lld",a+i);
    }
    sort(a,a+n);
    ll l = 1,r = a[n-1];
    ll ans = 0;
    while(l <= r){
        ll mid = l+r>>1;
        if(check(mid)){
            ans = mid;
            l = mid+1;
        }else r = mid-1;
    }
    printf("%lld\n",ans);
    return 0;
}