2
public int waysToSplit(int[] nums) {3
int size = nums.length;4
for (int i = 1; i < size; ++i) {5
nums[i] += nums[i - 1];8
int mod = 1_000_000_007;9
for (int i = 0; i < size - 2; ++i) {10
int left = searchLeft(nums, i, size - 1);11
int right = searchRight(nums, i, size - 1);12
if (left == -1 || right == -1) {15
res = (res + right - left + 1) % mod;20
private int searchLeft(int[] nums, int left, int right) {23
int lo = left + 1, hi = right - 1;25
int mi = lo + (hi - lo) / 2;26
int mid = nums[mi] - min;27
int max = nums[right] - nums[mi];30
} else if (max < mid) {40
private int searchRight(int[] nums, int left, int right) {43
int lo = left + 1, hi = right - 1;45
int mi = lo + (hi - lo) / 2;46
int mid = nums[mi] - min;47
int max = nums[right] - nums[mi];50
} else if (max < mid) {