Pagini recente » Cod sursa (job #1539419) | Cod sursa (job #2237665) | Cod sursa (job #291612) | Cod sursa (job #1198320) | Cod sursa (job #214306)
Cod sursa(job #214306)
#include<stdio.h>
long st,dr,m,s,j,rez,n,a[31000],i,x[31000],cb,r[31000];
long cautbin(long nr)
{
st=1;
dr=n;
rez=1;
while(st<=dr)
{
m=(st+dr)/2;
s=0;
for(j=m;j;j-=(j^(j-1))&j)
s+=x[j];
if(s>=nr){rez=m;dr=m-1;}
else st=m+1;
}
return rez;
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;++i){scanf("%ld",&a[i]);for(j=i;j<=n;j+=(j^(j-1))&j)x[j]+=1;}
for(i=n;i;--i)
{
cb=cautbin(a[i]);
r[cb]=i;
for(j=cb;j<=n;j+=(j^(j-1))&j)x[j]-=1;
}
for(i=1;i<=n;++i)printf("%ld\n",r[i]);
return 0;
}