Pagini recente » Cod sursa (job #996808) | Cod sursa (job #1181588) | Cod sursa (job #1355855) | Cod sursa (job #2944655) | Cod sursa (job #725164)
Cod sursa(job #725164)
#include<cstdio>
#include<cmath>
const int MAX_N = 30001 ;
const int MAX_NR = 201 ;
int n;
int v[MAX_N];
int loc[MAX_N];
int nr[MAX_NR];
int ocupat[MAX_N];
int indice(int x,int ni,int len)
{
int unu = x ;
int ind = 0,rez;
while( unu > nr[ind] )
unu -= nr[ind++] ;
for(int i=len *(ind-1) + 1;i<=n;++i)
{
if(ocupat[i]==1)
--unu;
if(unu == 0)
{
rez = i ;
break;
}
}
--nr[ind];
return rez;
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
int rad = (int)sqrt(n), start;
for(int i=1;i<=n;++i) {
ocupat[i] = 1 ;
nr[ (i - 1)/ rad + 1]++;
start = (i-1)/rad + 1;
}
for(int i=n;i>=1;--i)
{
int ind = indice(v[i],start,rad);
loc[ind] = i ;
ocupat[ind] = 0 ;
}
for(int i=1;i<=n;++i)
printf("%d\n",loc[i]);
return 0;
}