Pagini recente » Cod sursa (job #1373221) | Cod sursa (job #1686977) | Cod sursa (job #1444466) | Cod sursa (job #1246677) | Cod sursa (job #1366650)
#include <cstdio>
#define NMAX 30010
using namespace std;
int v[NMAX],sol[NMAX],n,i,A[3*NMAX],pos,Anod;
void Abuild(int nod,int st,int dr)
{
int mij;
A[nod]=dr-st+1;
if(st==dr)
return;
mij=st+(dr-st)/2;
Abuild(2*nod,st,mij);
Abuild(2*nod+1,mij+1,dr);
}
void Afind(int nod,int sum,int st,int dr)
{
int mij;
if(st==dr)
{
pos=st;
Anod=nod;
return;
}
mij=st+(dr-st)/2;
if(sum<=A[2*nod]) Afind(2*nod,sum,st,mij);
else Afind(2*nod+1,sum-A[2*nod],mij+1,dr);
}
void Aclear(int nod)
{
--A[nod];
if(nod==1)
return;
Aclear(nod/2);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d\n",&n);
for(i=1; i<=n; ++i)
scanf("%d\n",&v[++v[0]]);
Abuild(1,1,n);
for(i=n; i>=1; --i)
{
Afind(1,v[i],1,n);
sol[pos]=i;
Aclear(Anod);
}
for(i=1; i<=n; ++i)
printf("%d\n",sol[i]);
return 0;
}