#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 (int)); if (p
) memcpy(p
, b
, (e
- b
) * sizeof (int)); return p;
}
int icmp(void const *a, void const *b) {
return *(int *)a - *(int *)b;
}
void isort(int *b, int *e) {
qsort(b
, e
- b
, sizeof *b
, icmp
); }
int *unique(int *b, int *e) {
int *p, *q;
for (p = q = b + 1; p < e; p++)
if (*(p - 1) == *p) *q = *p; else *q++ = *p;
return q;
}
int *find(int *b, int *e, int value) {
for (; b < e; b++) if (*b == value) break;
return b;
}
void f920(int *b, int *e) {
int *u = idup(b, e), *v = u + (e - b);
isort(u, v), unique(u, v);
for (; b < e; b++) *b = find(u, v, *b) - u + 1;
}
void g920(int *b, int *e) {
p(b, e), f920(b, e), p(b, e);
}
int main() {
int a[] = {-6, 3, 9, 5, 3, -7};
#define size(a) (sizeof a / sizeof *a)
g920(a, a + size(a));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgp2b2lkIHAoaW50IGNvbnN0ICpiLCBpbnQgY29uc3QgKmUpIHsKICB3aGlsZSAoYiA8IGUpIHByaW50ZigiJWQgIiwgKmIrKyk7CiAgcHV0cygiIik7Cn0KaW50ICppZHVwKGludCBjb25zdCAqYiwgaW50IGNvbnN0ICplKSB7CiAgaW50ICpwID0gbWFsbG9jKChlIC0gYikgKiBzaXplb2YgKGludCkpOwogIGlmIChwKSBtZW1jcHkocCwgYiwgKGUgLSBiKSAqIHNpemVvZiAoaW50KSk7CiAgcmV0dXJuIHA7Cn0KaW50IGljbXAodm9pZCBjb25zdCAqYSwgdm9pZCBjb25zdCAqYikgewogIHJldHVybiAqKGludCAqKWEgLSAqKGludCAqKWI7Cn0Kdm9pZCBpc29ydChpbnQgKmIsIGludCAqZSkgewogIHFzb3J0KGIsIGUgLSBiLCBzaXplb2YgKmIsIGljbXApOwp9CmludCAqdW5pcXVlKGludCAqYiwgaW50ICplKSB7CiAgaW50ICpwLCAqcTsKICBmb3IgKHAgPSBxID0gYiArIDE7IHAgPCBlOyBwKyspCiAgICBpZiAoKihwIC0gMSkgPT0gKnApICpxID0gKnA7IGVsc2UgKnErKyA9ICpwOwogIHJldHVybiBxOwp9CmludCAqZmluZChpbnQgKmIsIGludCAqZSwgaW50IHZhbHVlKSB7CiAgZm9yICg7IGIgPCBlOyBiKyspIGlmICgqYiA9PSB2YWx1ZSkgYnJlYWs7CiAgcmV0dXJuIGI7Cn0Kdm9pZCBmOTIwKGludCAqYiwgaW50ICplKSB7CiAgaW50ICp1ID0gaWR1cChiLCBlKSwgKnYgPSB1ICsgKGUgLSBiKTsKICBpc29ydCh1LCB2KSwgdW5pcXVlKHUsIHYpOwogIGZvciAoOyBiIDwgZTsgYisrKSAqYiA9IGZpbmQodSwgdiwgKmIpIC0gdSArIDE7CiAgZnJlZSh1KTsKfQp2b2lkIGc5MjAoaW50ICpiLCBpbnQgKmUpIHsKICBwKGIsIGUpLCBmOTIwKGIsIGUpLCBwKGIsIGUpOwp9CmludCBtYWluKCkgewogIGludCBhW10gPSB7LTYsIDMsIDksIDUsIDMsIC03fTsKI2RlZmluZSBzaXplKGEpIChzaXplb2YgYSAvIHNpemVvZiAqYSkKICBnOTIwKGEsIGEgKyBzaXplKGEpKTsKICByZXR1cm4gMDsKfQo=