3. Consider the following code snippet that uses binary search on answer to find the minimum maximum load for dividing an array into
k subarrays:
bool canDivide(const vector<int>& arr, int k, int maxLoad) {
int currentSum = 0, count = 1;
for (int num : arr) {
if (num > maxLoad) return false;
if (currentSum + num > maxLoad) {
count++;
currentSum = num;
} else {
currentSum += num;
}
}
return count <= k;
}
int binarySearchAnswer(const vector<int>& arr, int k) {
int low = 0, high = 0;
for (int num : arr) high += num;
while (low < high) {
int mid = low + (high - low) / 2;
if (canDivide(arr, k, mid)) high = mid;
else low = mid + 1;
}
return low;
}
int main() {
vector<int> arr = {7, 2, 5, 10, 8};
int k = 2;
cout << binarySearchAnswer(arr, k) << endl;
}What is the output of this program?