Pagini recente » Cod sursa (job #2177507) | Cod sursa (job #2443173) | Cod sursa (job #2988096) | Cod sursa (job #2526353) | Cod sursa (job #1540138)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 30005;
int v[4*NMAX],A[NMAX],B[NMAX];
void buildtree(int nod,int l,int r){
if(r < l) return;
if(l == r){
v[nod] = 1;
return ;
}
int mij = (l + r) >> 1;
buildtree(nod << 1,l,mij);
buildtree((nod << 1) + 1,mij + 1, r);
v[nod] = r - l + 1;
}
void update(int nod,int l,int r,int poz,int i){
if(l == r){
v[nod] = 0;
B[l] = i;
return;
}
int mij = (l + r) >> 1;
if(poz <= v[nod<<1])
update(nod<<1,l,mij,poz,i);
else
update((nod<<1) + 1,mij + 1,r,poz - v[nod<<1],i);
v[nod]--;
}
int main()
{
int n;
freopen("schi.in","r",stdin);
freopen("sci.out","w",stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &A[i]);
buildtree(1,1,n);
for(int i = n; i >= 1;i--) update(1,1,n,A[i],i);
for(int i = 1; i <= n; i++)
printf("%d\n", B[i]);
return 0;
}