Pagini recente » Cod sursa (job #658755) | Cod sursa (job #2111663) | Cod sursa (job #1008427) | Cod sursa (job #1909409) | Cod sursa (job #657009)
Cod sursa(job #657009)
#include <stdio.h>
#include <string.h>
#define NMax 30010
#define zeros(x) ( x^(x-1)&x )
const char IN[]="schi.in",OUT[]="schi.out";
int N;
int v[NMax];
int aib[NMax] , p[NMax];
void Update(int x,int v){
for (;x<=N ; x+=zeros(x))
aib[x]+=v;
}
int Query(int x){
int ret=0;
for ( ; x>0 ; x-=zeros(x))
ret+=aib[x];
return ret;
}
char *waib(){
static char s[256],*r;
r=s;
for (int i=1;i<=N;++i)
{
sprintf(r,"%d ",Query(i)-Query(i-1));
while (*r) ++r;
}
*r=0;
return s;
}
int search(int x)
{
int i,step;
for (step=1;step<N;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=N && x>=aib[i+step])
i+=step,x-=aib[i];
return i;
}
int main()
{
int i,x;
freopen(IN,"r",stdin);
scanf("%d",&N);
for (i=1;i<=N;++i) scanf("%d",v+i);
fclose(stdin);
for (i=1;i<=N;++i) Update(i,1);
for (i=N;i>0;--i)
{
p[(x=search(v[i]-1)+1)]=i;
Update(x,-1);
}
freopen(OUT,"w",stdout);
for (i=1;i<=N;++i)
printf("%d\n",p[i]);
fclose(stdout);
return 0;
}