CCCPaste

Divide et Impera!

#include 
#include 

using namespace std;

void input(int* arr, int n, bool rm) {
	for (int i = 0; i < n; ++i) {
		if (rm && i + 1 == n) {
			arr[i] = arr[i - 1];
			break;
		}

		cout << "Podaj " << i + 1 << " liczbę: ";
		cin >> arr[i];
	}
}

void out(int* arr, int n) {
	cout << "[";
	for (int i = 0; i < n - 1; ++i)
		cout << arr[i] << ", ";
	
	cout << arr[n - 1] << "]" << endl;
}

int ext(int* arr, int n, bool mini = true) {
	int m = arr[0];
	for (int i = 0; i < n; ++i) {
		if (mini) {
			if (arr[i] < m) m = arr[i];
		} else {
			if (arr[i] > m) m = arr[i];
		}
	}
	
	return m;
}

tuple conquer(int* arr, int n) {
	int* low = new int[n / 2];
	int* high = new int[n / 2];
		
	for (int i = 0; i < n / 2; i++) {
		if (arr[i * 2] < arr[i * 2 + 1]) {
			low[i] = arr[i * 2];
			high[i] = arr[i * 2 + 1];
		}
		
		else {
			high[i] = arr[i * 2];
			low[i] = arr[i * 2 + 1];
		}
	}
	

	cout << "low: "; out(low, n / 2);
	cout << "high: "; out(high, n /2);
	
	return { ext(low, n / 2),  ext(high, n / 2, false) };
	
	delete[] low;
	delete[] high;
}

int main() {
	int n, min, max;
	bool rm = false;

	cout << "Ile liczb: ";
	cin >> n;

	if (n % 2 == 1) { n++; rm = true; }
	
	int *arr = new int[n];
	input(arr, n, rm);

	tie(min, max) = conquer(arr, n);
	cout << "min: " << min << endl << "max: " << max << endl << "rozpiętość: " << max - min << endl;
	
	delete[] arr;
	return 0;
}