Pagini recente » Cod sursa (job #877052) | Cod sursa (job #248010) | Cod sursa (job #1676197) | Cod sursa (job #1766882) | Cod sursa (job #1837618)
#include <cstdio>
using namespace std;
int n,v[30010],logn,v1[30010],rez[30010];
void aib_update(int a,int b)
{
for(int i=a;i<=n;i+=i&(-i)) v[i]+=b;
}
int aib_cauta(int a)
{
int poz=0;
for(int i=logn;i>=0;i--)
if(poz+(1<<i)<=n && v[poz+(1<<i)]<a)
{
poz+=1<<i;
a-=v[poz];
}
poz++;
return poz;
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
int poz;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&v1[i]);
for(int i=1;i<=n;i++)
aib_update(i,1);
for(logn=1;(1<<logn)<=n;logn++);
logn--;
for(int i=n;i>=1;i--)
{
poz=aib_cauta(v1[i]);
rez[poz]=i;
aib_update(poz,-1);
}
for(int i=1;i<=n;i++) printf("%d\n",rez[i]);
return 0;
}