Cod sursa(job #1548840)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 11 decembrie 2015 15:53:07
Problema Schi Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#define zeros(x) (((x-1)^x)&x)
#define MAXN 30000
int aib[MAXN+1],v[MAXN+1],v1[MAXN+1],n;
inline void add(int x,int nr){
    for(int i=x;i<=n;i+=zeros(i))
        aib[i]+=nr;
}
inline int sum(int x){
   int s=0;
   for(int i=x;i>0;i-=zeros(i))
        s+=aib[i];
   return s;
}
int main(){
    FILE*fi,*fout;
    int i,flag,nr;
    fi=fopen("schi.in" ,"r");
    fout=fopen("schi.out" ,"w");
    fscanf(fi,"%d" ,&n);
    for(i=1;i<=n;i++)
       fscanf(fi,"%d" ,&v[i]);
    for(i=n;i>0;i--){
        flag=1;
        int x=v[i];
        while(flag&&v[i]<n){
            nr=v[i];
            v[i]=x+sum(v[i]);
            if(v[i]==nr)
              flag=0;
        }
        add(v[i],1);
    }
    for(i=1;i<=n;i++)
        v1[v[i]]=i;
    for(i=1;i<=n;i++)
      fprintf(fout,"%d\n" ,v1[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}