Pagini recente » Cod sursa (job #55676) | Cod sursa (job #2739802) | Cod sursa (job #2956416) | Cod sursa (job #837758) | Cod sursa (job #2117879)
#include <stdio.h>
const int MAX_N = 30000;
FILE *fin, *fout;
int n;
int AIB[1 + MAX_N];
int sum(int k) {
int suma = 0;
while (k > 0) {
suma += AIB[k];
k &= k - 1;
}
return suma;
}
void add(int index, int value) {
while (index <= n) {
AIB[index] += value;
index += index & -index;
}
}
int kth(int k) {
int loc = 0;
for (int step = 1 << 14; step > 0; step >>= 1)
if (loc + step <= n && sum(loc + step) < k)
loc += step;
loc++;
return loc;
}
int main() {
freopen ("schi.in", "r", stdin);
freopen ("schi.out", "w", stdout);
scanf ("%d", &n);
int Loc[1 + n];
int Clasament[1 + n];
for (int i = 1; i <= n; i++)
scanf ("%d", &Loc[i]);
for (int i = 1; i <= n; i++)
add(i, 1);
for (int i = n; i >= 1; i--) {
Loc[i] = kth(Loc[i]);
Clasament[Loc[i]] = i;
add(Loc[i], -1);
}
for (int i = 1; i <= n; i++)
printf ("%d\n", Clasament[i]);
return 0;
}