思路就是二分答案+前缀和,但是只有 20 分,找不出错……
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
int n, m, l, r, mid;
long long maxn;
long long sum[MAXN];
bool check(long long x){
long long cnt(0), tmp(0), ind(1);
while (cnt <= x && ind <= n){
ind = upper_bound(sum+ind, sum+n+1, tmp+x)-sum;
tmp = sum[ind-1];
cnt++;
}
return cnt > x;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i(1); i<=n; ++i){
cin >> sum[i];
maxn = max(maxn, sum[i]);
sum[i] += sum[i-1];
}
l = maxn;
r = sum[n];
while (l < r){
mid = (l+r)>>1;
if (check(mid)) l = mid+1;
else r = mid;
}
cout << r;
return 0;
}