Cod sursa(job #1427681)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 2 mai 2015 20:38:17
Problema Schi Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <stdlib.h>
#define zeros(x) (((x-1)^x)&x)
#define MAXN 30001
int aib[MAXN],n,v[MAXN],v1[MAXN];
inline void add(int x,int nr){
    int i;
    for(i=x;i<=n;i+=zeros(i))
        aib[i]+=nr;
}
inline int sum(int x){
    int s=0,i;
    for(i=x;i>0;i-=zeros(i))
        s+=aib[i];
    return s;
}
int main(){
    FILE*fi,*fout;
    int i,nr,flag,x;
    fi=fopen("schi.in" ,"r");
    fout=fopen("schi.out" ,"w");
    fscanf(fi,"%d" ,&n);
    for(i=0;i<n;i++)
       fscanf(fi,"%d" ,&v[i]);
    for(i=n-1;i>=0;i--){
        nr=v[i];
        flag=1;
        while(flag){
             x=v[i];
             v[i]=nr+sum(v[i]);
             if(x==v[i])
                flag=0;
        }
        add(v[i],1);
    }
    for(i=0;i<n;i++)
        v1[v[i]]=i+1;
    for(i=1;i<=n;i++)
        fprintf(fout,"%d\n" ,v1[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}