Pagini recente » Cod sursa (job #2802993) | Cod sursa (job #2124557) | Cod sursa (job #187446) | Cod sursa (job #2082303) | Cod sursa (job #52929)
Cod sursa(job #52929)
#include <stdio.h>
#define nmax 30005
#define valmax 64600
unsigned short int a[nmax],arb[valmax],r[nmax];
int n,i;
void init(int nod,int i,int j) {
if(i == j) arb[nod] = 1;
else {
int mi = (i + j) / 2;
init(nod * 2,i,mi);
init(nod * 2 + 1,mi + 1,j);
arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
}
}
int query(int nod,int i,int j,int ax) {
arb[nod]--;
if(i == j) return i;
else {
int mi = (i + j) / 2;
if(arb[nod * 2] < ax) return query(nod * 2 + 1,mi + 1,j,ax - arb[nod * 2]);
else return query(nod * 2,i,mi,ax);
}
}
int main() {
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i = 1; i <= n; i++) scanf("%d ",&a[i]);
init(1,1,n);
for(i = n; i >= 1; i--)
r[query(1,1,n,a[i])] = i;
for(i = 1; i <= n; i++) printf("%d\n",r[i]);
return 0;
}