Pagini recente » Cod sursa (job #1580521) | Cod sursa (job #1188203) | Cod sursa (job #1665937) | Cod sursa (job #2569036) | Cod sursa (job #856868)
Cod sursa(job #856868)
#include <cstdio>
#define lsb(x) x&(-x)
int v[30009],aib[30009],n;
void update(int poz)
{
for (;poz<=n;poz+=lsb(poz))
++aib[poz];
}
int getaib(int poz)
{
int rez=0;
for (;poz>0;poz-=lsb(poz))
rez+=aib[poz];
return rez;
}
int getpoz(int poz)
{
int i,step;
for (i=0,step=1<<16;step;step>>=1)
if ((i+step<=n) && (i+step-getaib(i+step)<poz))
i+=step;
return i+1;
}
int main()
{
int i,j,v2[30009];
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i) scanf("%d",&v2[i]);
for (i=n;i>0;--i)
{
j=getpoz(v2[i]);
//while (v[j]) ++j;
v[j]=i;
update(j);
}
for (i=1;i<=n;++i)
printf("%d\n",v[i]);
return 0;
}