#include <stdio.h>
#include <stdlib.h>
static int *val;
static int ncmp;
static int nsolid;
static int candidate;
static int gas;
#define freeze(x) (val[(x)] = nsolid++)
static int
cmp(const void *px, const void *py)
{
const int x = *(const int *)px;
const int y = *(const int *)py;
ncmp++;
if (val[x] == gas && val[y] == gas) {
if (x == candidate)
freeze(x);
else
freeze(y);
}
if (val[x] == gas)
candidate = x;
else if (val[y] == gas)
candidate = y;
return val[x] > val[y] ? 1 : val[x] < val[y] ? -1 : 0;
}
int
antiqsort(int n, int *a, int *ptr)
{
int i;
val = a;
gas = n - 1;
nsolid = ncmp = candidate = 0;
for (i = 0; i < n; i++) {
ptr[i] = i;
val[i] = gas;
}
qsort(ptr, n, sizeof(*ptr), cmp);
return ncmp;
}