#include <iostream>
#include <vector>
using namespace std;
int n, m;
vector<int> nums;
bool check (int maxSum){
int segSum = 0, segCount = 1;
for (int num : nums){
if(segSum + num > maxSum){
segSum = num;
segCount ++;
if(segCount > m) return false;
}else{
segSum += num;
}
}
return true;
}
int main(){
cin >> n >> m;
nums.resize(n);
int l = 0, r = 0;
for(int i =0; i < n; i++){
cin >> nums[i];
l = max(1, nums[i]);
r += nums[i];
}
while(l < r){
int mid = l + (r-l)/2;
if(check(mid)) r = mid;
else l = mid + 1;
}
cout << l;
return 0;
}
/*#include <iostream>
#include <vector>
using namespace std;
int n, m;
vector<int> nums;
bool check(int maxSum) {
int segSum = 0, segCount = 1;
for (int num : nums) {
if (segSum + num > maxSum) {
segSum = num;
segCount++;
if (segCount > m) return false;
} else {
segSum += num;
}
}
return true;
}
int main() {
cin >> n >> m;
nums.resize(n);
int l = 0, r = 0;
for (int i = 0; i < n; i++) {
cin >> nums[i];
l = max(l, nums[i]);
r += nums[i];
}
while (l < r) {
int mid = l + (r - l) / 2;
if (check(mid)) r = mid;
else l = mid + 1;
}
cout << l;
return 0;
}*/
注释里是能过的