Cod sursa(job #214306)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 13 octombrie 2008 20:41:57
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#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;
}