Link to this code:
https://cses.fi/paste/ba69072b23b7fbd7c79fc6//* 777 */
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FAST_IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, k;
vector<int> vec;
int check(int max_sum) {
int cur_sum = 0, cnt = 1;
for (int x : vec) {
if (cur_sum + x > max_sum) {
cur_sum = x;
cnt++;
} else cur_sum += x;
if (cnt > k) return 0;
}
return 1;
}
void solve() {
cin >> n >> k;
vec.resize(n);
for (int &x : vec) cin >> x;
int lo = *max_element(vec.begin(), vec.end()), hi = accumulate(vec.begin(), vec.end(), 0LL), ans = hi;
while (lo <= hi) {
int mid = lo + ((hi - lo) >> 1);
if (check(mid)) {
ans = mid;
hi = mid - 1;
} else lo = mid + 1;
}
cout << ans;
}
int32_t main() {
FAST_IO
solve();
}