




#include <vector> // 1011. O(N * Log(Sum(W))) O(1)
#include <numeric>
#include <algorithm>
using namespace std;
class Solution {
public:
int shipWithinDays(vector<int>& w, int d) {
const int n = (int)w.size();
const int* a = w.data();
int L = *max_element(w.begin(), w.end());
int R = accumulate(w.begin(), w.end(), 0);
auto ok = [&](int c) { // lambda
int need = 1, cur = 0;
for (int i = 0; i < n; ++i) { // for
if (cur + a[i] > c) { // if
if (++need > d) return false;
cur = a[i];
} else { // else
cur += a[i];
} // else
} // for
return true;
}; // lambda
while (L < R) { // while
int m = L + (R - L) / 2;
if (ok(m)) R = m;
else L = m + 1;
} // while
return L;
}
};