fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. void p(int const *b, int const *e) {
  5. while (b < e) printf("%d ", *b++);
  6. puts("");
  7. }
  8. int *idup(int const *b, int const *e) {
  9. int *p = malloc((e - b) * sizeof (int));
  10. if (p) memcpy(p, b, (e - b) * sizeof (int));
  11. return p;
  12. }
  13. int icmp(void const *a, void const *b) {
  14. return *(int *)a - *(int *)b;
  15. }
  16. void isort(int *b, int *e) {
  17. qsort(b, e - b, sizeof *b, icmp);
  18. }
  19. int *unique(int *b, int *e) {
  20. int *p, *q;
  21. for (p = q = b + 1; p < e; p++)
  22. if (*(p - 1) == *p) *q = *p; else *q++ = *p;
  23. return q;
  24. }
  25. int *find(int *b, int *e, int value) {
  26. for (; b < e; b++) if (*b == value) break;
  27. return b;
  28. }
  29. void f920(int *b, int *e) {
  30. int *u = idup(b, e), *v = u + (e - b);
  31. isort(u, v), unique(u, v);
  32. for (; b < e; b++) *b = find(u, v, *b) - u + 1;
  33. free(u);
  34. }
  35. void g920(int *b, int *e) {
  36. p(b, e), f920(b, e), p(b, e);
  37. }
  38. int main() {
  39. int a[] = {-6, 3, 9, 5, 3, -7};
  40. #define size(a) (sizeof a / sizeof *a)
  41. g920(a, a + size(a));
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
-6 3 9 5 3 -7 
2 3 5 4 3 1