Pagini recente » Cod sursa (job #1135963) | Cod sursa (job #462491) | Cod sursa (job #2234261) | Cod sursa (job #1121198) | Cod sursa (job #219898)
Cod sursa(job #219898)
#include<stdio.h>
#define NMAX 32768
int A[(NMAX<<1)+(NMAX<<1)],SOL[NMAX],S[NMAX];
int val,fspace;
void init(int nod,int left,int right)
{
if( left==right )
{
A[nod]=1;
return;
}
else
{
int mij=(left+right)>>1;
int aux=nod<<1;
init(aux,left,mij);
init(aux+1,mij+1,right);
A[nod]=A[aux]+A[aux+1];
}
}
void update(int nod, int left, int right)
{
if( left==right )
{
SOL[ left ]=val;
A[ nod ]=0;
return;
}
else
{
int mij=(left+right)>>1;
int aux=nod<<1;
if( A[ aux ]>= fspace )
update( aux, left, mij );
else
{
fspace-=A[aux];
update( aux+1, mij+1, right );
}
A[nod]=A[aux]+A[aux+1];
}
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
int N;
scanf("%d",&N);
init(1,1,N);
int i;
for(i=1; i<=N; ++i) scanf("%d\n",&S[i]);
for(i=N; i; --i)
{
val=i;
fspace=S[i];
update(1,1,N);
}
for(i=1; i<=N; ++i)
printf("%d\n",SOL[i]);
return 0;
}