Cod sursa(job #253319)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 17:49:26
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
 #include <cstdio>  
 #include <algorithm>   
 #define IN "schi.in"  
 #define OUT "schi.out"  
 #define left (nod << 1)  
 #define bit(x) ((x)&(x-1))^(x)  
 #define II inline  
 #define FOR(i,a,b) for(int i=a;i<=b;++i)  
 #define N_MAX 1<<15  
   
 int S[N_MAX],A[1<<16],V[N_MAX];  
 int N;  
   
 II void scan()  
 {  
     freopen(IN, "r",stdin);  
     freopen(OUT, "w",stdout);  
     scanf("%d\n", &N);  
     FOR(i,1,N)  
         scanf("%d", &V[i]);  
 }  
   
 II void update(int x)  
 {  
     for(int i=x;i<=N;i += bit(i) )  
         ++A[i];  
 }     
   
 II int querry(int x)  
 {    
     int sum(x);  
     for(int i=--x;i>=1;i -= bit(i) )  
         sum -= A[i];  
     return sum;  
 }  
   
 void solve()  
 {  
     int Step,step,m;  
     for(Step = 1;Step < N;Step <<= 1);  
       
     for(int i=N;i>=1;--i)  
     {  
         for(m = 1,step = Step;step;step >>= 1)    
             if(m + step <= N && querry(m + step) <= V[i])   
                 m += step;    
         S[m] = i;    
         update(m);    
     }  
     FOR(i,1,N)  
         printf("%d\n",S[i]);  
 }  
   
 int main()  
 {  
     scan();  
     solve();  
     return 0;  
}