inlineintread(){ registerchar c; while (c = getchar(), c < '0' || c > '9'); registerintx(c - '0'); while (c = getchar(), c >= '0' && c <= '9') { x=x * 10 + c - '0'; } return x; }
int n; int a[MAXn + 10]; int tmp[MAXn + 10]; voidmerge(int l, int r){ if (r - l <= 1) { return; } int mid = l + (r - l >> 1); merge(l, mid); merge(mid, r); int p = l, q = mid, s = l; while (s < r) { if (p >= mid || (q < r && a[p] > a[q])) { tmp[s++] = a[q++]; } else { tmp[s++] = a[p++]; } } for (int i = l; i < r; i++) { a[i] = tmp[i]; } }
intmain(){ n = read(); for (int i = 0; i < n; i++) { a[i] = read(); } merge(0, n); for (int i = 0; i < n; i++) { printf("%d ", a[i]); } }