Pagini recente » Cod sursa (job #2891285) | Statistici Hascki Einstein (UVT_BUTUNOI_BOGDAN_PETRU) | Cod sursa (job #337228) | Cod sursa (job #3253768) | Cod sursa (job #827441)
Cod sursa(job #827441)
#include<cstdio>
#define Nmax 32768
int N, poz, val, aint[Nmax], pinit[Nmax], pfinal[Nmax];
void update(int nod, int st, int dr) {
if(st == dr) {
aint[nod] = val;
return;
}
int mij = (st+dr)/2;
if(poz<=mij)
update(nod*2, st, mij);
else
update(nod*2+1, mij+1, dr);
aint[nod] = aint[nod*2] + aint[nod*2+1];
}
void query(int nod, int st, int dr, int sum) {
if(st == dr)
poz = st;
else {
int mij = (st+dr)/2;
if(aint[nod*2] >= sum)
query(nod*2, st, mij, sum);
else
query(nod*2+1, mij+1, dr, sum-aint[nod*2]);
}
}
void read_data() {
freopen("schi.in","r",stdin);
int i;
scanf("%d",&N);
for(i=1; i<=N; ++i) {
scanf("%d",&pinit[i]);
poz = i;
val = 1;
update(1, 1, N);
}
}
void solve() {
int i;
val = 0;
for(i=N; i>=1; --i) {
query(1, 1, N, pinit[i]);
pfinal[poz] = i;
update(1, 1, N);
}
}
void print_data() {
freopen("schi.out","w",stdout);
int i;
for(i=1; i<=N; ++i)
printf("%d\n",pfinal[i]);
}
int main() {
read_data();
solve();
print_data();
return 0;
}