Split array into halves, compute (min, max) for each half, then combine by comparing local minima and maxima. This reduces comparison count versus naïve independent scans for min and max.
pair<int,int> minMax(vector<int>& a, int l, int r) {
if (l == r) return {a[l], a[l]};
if (r == l + 1) return {min(a[l], a[r]), max(a[l], a[r])};
int m = (l + r) / 2;
auto L = minMax(a, l, m);
auto R = minMax(a, m + 1, r);
return {min(L.first, R.first), max(L.second, R.second)};
}Break into two halves until base cases of one or two elements.
Merge by min(min1, min2) and max(max1, max2).
Uses fewer comparisons than finding min and max independently.
Quiz coming soon for this algorithm.