leetcode 410 二分枚举 + 线性贪心检查是否能符合,时间复杂度O(nlog(sum))
class Solution {
public:
    bool canSplit(vector<int>& nums, int m, int mid){
        // cout << mid << ' ';
        long long sum = 0, cnt = 1;
        for(int &x: nums){
            if(sum + x > mid){
                sum = x;
                ++cnt;
                if(cnt > m) return false;
            }else sum += x;
        }
        return true;
    }
    int splitArray(vector<int>& nums, int m) {
        long long l = 0, r = 0;
        for(int &x: nums){
            r += x;
            if(x > l) l = x;
        }
        while(l < r){
            int mid = l + r >> 1;
            // cout << l << ' ' << r << ' ' << mid << endl;
            if(canSplit(nums, m, mid)) r = mid;
            else l = mid + 1;
        }
        return r;
    }
};