#include<iostream>
using namespace std;
int main() {
int n, m, ans[100005] = { 0 }, t, i, l=0, r,mid,c,now,pre,result;
cin >> n >> m;
for (i = 1; i <= n; i++) {
cin >> t;
if (t > l)
l =t ;
ans[i] = ans[i - 1] + t;
}
r = ans[n];
while (l <= r) {
mid = (r + l) / 2;
c = 0;
pre = 0;
now = 0;
for (i = 1; i <= n;) {
now = i;
if (now == n) {
c++;
i++;
}
else if (ans[now] - ans[pre] == mid) {
c++;
pre = now;
i++;
}
else if (ans[now] - ans[pre] > mid) {
c++;
pre = now - 1;
}
else {
i++;
}
}
if (c > m) {
l = mid + 1;
}
else if (c == m) {
result = mid;
r = mid - 1;
}
else {
r = mid - 1;
}
}
cout << result;
}
思路是二分答案加前缀和
希望能帮我看看哪里有问题