#include #include #define MAXN 50 int n; int seq[MAXN]; int next[MAXN]; int med[MAXN]; int b[MAXN]; void merge(int f, int s, int e) { int i = f, j = s, k; k = f; while (i < s && j < e) { if (seq[j] > seq[i]) b[k++] = seq[j++]; else b[k++] = seq[i++]; } while (i < s) b[k++] = seq[i++]; while (j < e) b[k++] = seq[j++]; for (k=f; k med[next[i]]) { merge(i, next[i], next[next[i]]); next[i] = next[next[i]]; med[i] = seq[(i+next[i])/2]; done = 0; } i = next[i]; } } a = 0; while (a < n) { for (i = a; i