Link to this code:
https://cses.fi/paste/4125181b8fb9a611dd385a/
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
bool validsum(ll sum , int arr[],int n,int k){
ll cntsum = 0;
int parts = 0;
for (int i=0;i<n;i++) {
cntsum += arr[i];
if(cntsum > sum){
parts++;
cntsum = arr[i];
}
}
parts++;
return parts <= k;
}
int main() {
// your code goes here
int n,k;cin >> n >> k;
int arr[n];
for(int i = 0;i<n;i++){
cin >>arr[i];
}
// apply bs on increasing sum
ll maxel = *max_element(arr,arr+n);
ll total = accumulate(arr, arr+n,0LL);
ll l = maxel, h = total;
ll ans = total;
while(l <= h){
ll mid = (l + h)/2;
// cout <<"low : "<< l << " and h: "<< h<<endl;
if(validsum(mid,arr,n,k)){
ans = mid;
h = mid - 1;
}else{
l = mid + 1;
}
}
cout << ans << "\n";
}