Pagini recente » Cod sursa (job #2938430) | Cod sursa (job #2763376) | Cod sursa (job #2073522) | Cod sursa (job #2645895) | Cod sursa (job #1320319)
#include<stdio.h>
int aib[30004],v[30004],sol[30004],n;
int lsb(int x)
{
return x&(-x);
}
void update(int poz, int val)
{
while(poz<=n)
{
aib[poz]+=val;
poz+=lsb(poz);
}
}
int query(int poz)
{
int ans=0;
while(poz>0)
{
ans+=aib[poz];
poz-=lsb(poz);
}
}
int bs(int x)
{
int ans=0;
for(int b=20;b>=0;b--)
{
if(ans+(1<<b)<=n&&aib[ans+(1<<b)]<x)
{
ans+=(1<<b);
x-=aib[ans];
}
}
return ans+1;
}
int main()
{
int i,t;
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);
}
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;
}