Pagini recente » Cod sursa (job #2418526) | Cod sursa (job #992815) | Cod sursa (job #2798807) | Cod sursa (job #132248) | Cod sursa (job #338463)
Cod sursa(job #338463)
#include<cstdio>
const int N = (1<<15);
int v[N],poz[N],n,t[N<<2];
void citire()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
}
int query(int p,int st,int dr,int x)
{
--t[p];
if(st==dr)
return st;
int mid=(st+dr)>>1;
if(x<=t[p<<1])
return query(p<<1,st,mid,x);
else
return query((p<<1)+1,mid+1,dr,x-t[p<<1]);
}
void init(int p,int st,int dr)
{
if(st==dr)
{
++t[p];
return;
}
int mid=(st+dr)>>1;
init(p<<1,st,mid);
init((p<<1)+1,mid+1,dr);
t[p]=t[p<<1]+t[(p<<1)+1];
}
void calcul()
{
int i,q;
init(1,1,n);
for(i=n;i;--i)
{
q=query(1,1,n,v[i]);
poz[q]=i;
}
}
void scrie()
{
for(int i=1;i<=n;++i)
printf("%d\n",poz[i]);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
citire();
calcul();
scrie();
return 0;
}