二分检验答案
注意一个样例 n<m且n中长度都为1. 应该输出0

#include <iostream>
using namespace std;
const int maxn = 200010;
long long arr[maxn];
int n;
long long m;
bool judge(long long num) {
    long long ans=0;
    for (int i = 1; i <= n; i++) {
        long long temp = arr[i];
        while (temp - num>= 0) {
            temp-=num;
            ans++;
        }
    }
    if (ans <m)return false;
    return true;
}
long long find(long long l, long long r) {
    while (l < r) {
        long long mid = l + (r - l+1) / 2;
        if (judge(mid))l = mid;
        else r = mid - 1;
    }
    return l;
}
int main()
{
   scanf("%d%lld",&n,&m);
    long long maxn = 0;
    for (int i = 1; i <= n; i++) {
        scanf("%lld",&arr[i]);
        maxn = max(maxn, arr[i]);
    }
    if(maxn==1&&n<m){
        cout<<"0";
        return 0;
    }
    cout<<find(1, maxn);
}