#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void p(int const *b, int const *e) {
while (b
< e
) printf("%d ", *b
++); }
int *idup(int const *b, int const *e) {
int *p
= malloc((e
- b
) * sizeof *b
); if (p
) memcpy(p
, b
, (e
- b
) * sizeof *b
); return p;
}
int icmp(void const *a, void const *b) {
return *(int *)a - *(int *)b;
}
void f(int *b, int *e) {
int size = e - b, *buff = idup(b, e), *p, *q;
qsort(buff
, size
, sizeof *b
, icmp
); #define odd(n) ((n) % 2)
#define even(n) (!odd(n))
for (p = buff, q = p + size - 1; b < e; b++)
if (odd(*b)) {while (even(*p)) p++; *b = *p++;}
else {while (odd(*q)) q--; *b = *q-- / 2;}
}
void g(int *b, int *e) {
p(b, e), f(b, e), p(b, e);
}
int main() {
int a[] = {0, 9, 8, 4, 6, 5, 1, 2, 7, 3};
#define size(a) (sizeof a / sizeof *a)
g(a, a + size(a));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgp2b2lkIHAoaW50IGNvbnN0ICpiLCBpbnQgY29uc3QgKmUpIHsKICB3aGlsZSAoYiA8IGUpIHByaW50ZigiJWQgIiwgKmIrKyk7CiAgcHV0cygiIik7Cn0KaW50ICppZHVwKGludCBjb25zdCAqYiwgaW50IGNvbnN0ICplKSB7CiAgaW50ICpwID0gbWFsbG9jKChlIC0gYikgKiBzaXplb2YgKmIpOwogIGlmIChwKSBtZW1jcHkocCwgYiwgKGUgLSBiKSAqIHNpemVvZiAqYik7CiAgcmV0dXJuIHA7Cn0KaW50IGljbXAodm9pZCBjb25zdCAqYSwgdm9pZCBjb25zdCAqYikgewogIHJldHVybiAqKGludCAqKWEgLSAqKGludCAqKWI7Cn0Kdm9pZCBmKGludCAqYiwgaW50ICplKSB7CiAgaW50IHNpemUgPSBlIC0gYiwgKmJ1ZmYgPSBpZHVwKGIsIGUpLCAqcCwgKnE7CiAgcXNvcnQoYnVmZiwgc2l6ZSwgc2l6ZW9mICpiLCBpY21wKTsKI2RlZmluZSBvZGQobikgKChuKSAlIDIpCiNkZWZpbmUgZXZlbihuKSAoIW9kZChuKSkKICBmb3IgKHAgPSBidWZmLCBxID0gcCArIHNpemUgLSAxOyBiIDwgZTsgYisrKSAKICAgIGlmIChvZGQoKmIpKSB7d2hpbGUgKGV2ZW4oKnApKSBwKys7ICpiID0gKnArKzt9CiAgICBlbHNlIHt3aGlsZSAob2RkKCpxKSkgcS0tOyAqYiA9ICpxLS0gLyAyO30KICBmcmVlKGJ1ZmYpOwp9CnZvaWQgZyhpbnQgKmIsIGludCAqZSkgewogIHAoYiwgZSksIGYoYiwgZSksIHAoYiwgZSk7Cn0KaW50IG1haW4oKSB7CiAgaW50IGFbXSA9IHswLCA5LCA4LCA0LCA2LCA1LCAxLCAyLCA3LCAzfTsKI2RlZmluZSBzaXplKGEpIChzaXplb2YgYSAvIHNpemVvZiAqYSkKICBnKGEsIGEgKyBzaXplKGEpKTsKICByZXR1cm4gMDsKfQo=