#include <iostream>
using namespace std;
#define MAX(a,b) (a) > (b) ? (a) : (b)
#define MIN(a,b) (a) > (b) ? (b) : (a)
int get_max(int* arr, int left, int right)
{
int maxleft = 0, maxright = 0, mid = 0;
if (left == right)
return arr[left];
else if (left == right-1)
return MAX(arr[left], arr[right]);
mid = (left+right)/2;
maxleft = get_max(arr,left,mid);
maxright =get_max(arr, mid+1, right);
return MAX(maxleft, maxright);
}
void get_min_max(int* arr, int left, int right, int* min, int * max)
{
int mid = 0;
int lmin=0, lmax=0;
int rmin=0, rmax=0;
if (left == right) {
*min = arr[left];
*max = arr[left];
return;
} else if (left == right - 1) {
*min = MIN(arr[left], arr[right]);
*max = MAX(arr[left], arr[right]);
return;
}
mid = (left+right) / 2;
get_min_max(arr, left, mid, &lmin, &lmax);
get_min_max(arr, mid+1, right, &rmin, &rmax);
*min = MIN(lmin, rmin);
*max = MAX(lmax, rmax);
}
int main()
{
int min, max;
int arr[] = {11, 9, 20, 56, 42, 3, 7,15,16};
int len = sizeof(arr)/sizeof(arr[0]);
get_max(arr, 0, len-1);
get_min_max(arr, 0, len-1, &min, &max);
cout<<"max:"<<max<<"min:"<<min;
return 0;
}