Pagini recente » Cod sursa (job #3167870) | Cod sursa (job #1263173) | Cod sursa (job #195248) | Cod sursa (job #1224952) | Cod sursa (job #1331836)
#include<stdio.h>
int v[30005],sol[30005],aib[30004],n;
int lcb(int x)
{
return x&(-x);
}
void update(int poz,int x)
{
while(poz<=n)
{
aib[poz]+=x;
poz+=lcb(poz);
}
}
int bs(int x)
{
int sol=0;
for(int b=20;b>=0;b--)
{
if(sol+(1<<b)<=n&&aib[sol+(1<<b)]<x)
{
sol+=(1<<b);
x-=aib[sol];
}
}
return sol+1;
}
int main()
{
int i;
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
update(i,1);
}
int t;
for(i=n;i>=1;i--)
{
t=bs(v[i]);
sol[t]=i;
update(t,-1);
}
for(i=1;i<=n;i++)
printf("%d\n",sol[i]);
return 0;
}