3. Consider the following C code snippet using binary search on answer to find the minimum maximum load to split an array into
m subarrays:
int canSplit(int* arr, int n, int m, int maxLoad) {
int count = 1, currentSum = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > maxLoad) return 0;
if (currentSum + arr[i] > maxLoad) {
count++;
currentSum = arr[i];
} else {
currentSum += arr[i];
}
}
return count <= m;
}
int binarySearchAnswer(int* arr, int n, int m) {
int low = 0, high = 0;
for (int i = 0; i < n; i++) high += arr[i];
int ans = high;
while (low <= high) {
int mid = (low + high) / 2;
if (canSplit(arr, n, m, mid)) {
ans = mid;
high = mid - 1;
} else {
low = mid + 1;
}
}
return ans;
}
int main() {
int arr[] = {7, 2, 5, 10, 8};
int n = 5, m = 2;
printf("%d", binarySearchAnswer(arr, n, m));
return 0;
}
What is the output of this program?