3. What is the output of the following code snippet using divide and conquer to find max subarray sum?
int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int n = 9;
int maxCrossingSum(int arr[], int low, int mid, int high) {
int sum = 0, left_sum = INT_MIN;
for (int i = mid; i >= low; i--) {
sum += arr[i];
if (sum > left_sum) left_sum = sum;
}
sum = 0; int right_sum = INT_MIN;
for (int i = mid + 1; i <= high; i++) {
sum += arr[i];
if (sum > right_sum) right_sum = sum;
}
return left_sum + right_sum;
}
int maxSubArraySum(int arr[], int low, int high) {
if (low == high) return arr[low];
int mid = (low + high) / 2;
int left_max = maxSubArraySum(arr, low, mid);
int right_max = maxSubArraySum(arr, mid + 1, high);
int cross_max = maxCrossingSum(arr, low, mid, high);
return max(max(left_max, right_max), cross_max);
}
int result = maxSubArraySum(arr, 0, n - 1);
std::cout << result;