Pagini recente » Cod sursa (job #3292100) | Cod sursa (job #1045692) | Cod sursa (job #401527) | Cod sursa (job #1915956) | Cod sursa (job #2528241)
#include <iostream>
#include <cstdio>
#define NMAX 30000
using namespace std;
int n;
int v[NMAX + 5], aint[4 * NMAX + 5], ord[NMAX + 5];
void init(int nod, int st, int dr) {
int mij = (st + dr) / 2;
aint[nod] = dr - st + 1;
if(dr != st) {
init(2 * nod, st, mij);
init(2 * nod + 1, mij + 1, dr);
}
}
int query(int nod, int st, int dr, int qval) {
int mij = (st + dr) / 2;
aint[nod]--; /// update
if(st == dr)
return st;
if(qval <= aint[2 * nod])
return query(2 * nod, st, mij, qval);
return query(2 * nod + 1, mij + 1, dr, qval - aint[2 * nod]);
}
int main() {
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
int poz;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &v[i]);
init(1, 1, n);
for(int i = n; i >= 1; i--) {
poz = query(1, 1, n, v[i]);
ord[poz] = i;
}
for(int i = 1; i <= n; i++)
printf("%d\n", ord[i]);
return 0;
}