class Solution {
public:
bool isOkay(int dayLimit, int capacity, vector<int>& weights) {
int sum = 1e9;
int day = 0;
for(int i = 0; i < weights.size(); i++) {
if(sum + weights[i] > capacity) {
day++;
sum = 0;
}
sum += weights[i];

if(day > dayLimit) {
return false;
}
}
return true;
}
int shipWithinDays(vector<int>& weights, int days) {
int lo = *max_element(weights.begin(), weights.end());
int hi = 2500*1e4;
int answer = hi;
while(lo <= hi) {
int mid = (lo + hi) / 2;
if(isOkay(days, mid, weights)) {
answer = mid;
hi = mid - 1 ;
}
else {
lo = mid + 1;
}
}
return answer;
}
};