#include using namespace std; #define fastIO ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); static const int SIZE = 1 << 20; void input(int* arr, int &n) { cin >> n; for (int i = 0; i < n; i++) { cin >> arr[i]; } } void print(int* arr, int n) { for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << "\n"; } void merge(int* arr, int from, int to) { int mid = (from + to) / 2; int* left = new int[mid - from + 1]; int* right = new int[to - mid]; for (int i = from; i <= mid; i++) { left[i - from] = arr[i]; } for (int i = mid + 1; i <= to; i++) { right[i - mid - 1] = arr[i]; } int i = 0; int j = 0; int index = from; while (i < mid - from + 1 && j < to - mid) { if (left[i] < right[j]) { arr[index++] = left[i++]; } else { arr[index++] = right[j++]; } } while (i < mid - from + 1) { arr[index++] = left[i++]; } while (j < to - mid) { arr[index++] = right[j++]; } delete[] left; delete[] right; } void mergeSort(int* arr, int from, int to) { if (from >= to) return; int mid = (from + to) / 2; mergeSort(arr, from, mid); mergeSort(arr, mid + 1, to); merge(arr, from, to); } int n; int arr[SIZE]; int main() { fastIO input(arr, n); mergeSort(arr, 0, n - 1); print(arr, n); return 0; }