Cod sursa(job #908742)

Utilizator superman_01Avramescu Cristian superman_01 Data 9 martie 2013 22:57:08
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb

#include<cstdio>

#define NMAX 30005
#define lsb(x) x&(-x)

FILE *f=fopen("schi.in","r");
FILE *g=fopen("schi.out","w");

using namespace std;

int N,v[NMAX],res[NMAX],AIB[NMAX];

void Update( int nod,int val)
{
  for(;nod<=N;nod+=lsb(nod))
  AIB[nod]+=val;
}
int Query(int nod)
{
    int s=0;
   for(;nod;nod-=lsb(nod))
    s+=AIB[nod];
   return s;
}

inline int bs( int val)
{
  int step=1<<20,right=N;
   while( step )
{
    if( right-step >= 1 && Query(right-step ) >= val )
        right-=step;

     step>>=1;


}

    return right;




}


void solve( void )
{
    int Answer;
    for(int i(1) ; i  <= N ; ++i )
    Update(i,1);

    for(int i(N); i; i--)
    {
     Answer=bs(v[i]);
     res[Answer]=i;
     Update(Answer,-1);
    }


}
void write ( void )
{
    for(int i(1); i <= N ; fprintf(g,"%d\n",res[i++]));
    fclose(g);


}
int main()
{
    fscanf(f,"%d",&N);
    for(int i(1); i <= N ; fscanf(f,"%d",&v[i++]));
    fclose(f);
    solve();
    write();
    return 0;
}