Cod sursa(job #1282352)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 4 decembrie 2014 02:32:44
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
int n,i,j,a,b,p,x[200100],v[200100],y[200100];
FILE *f,*g;
void upd1(int nod,int l,int r,int p,int x){
    if(l==r){
        v[nod]=x;
        return;
    }
    int mid=(l+r)/2;
    if(p<=mid)
        upd1(2*nod,l,mid,p,x);
    else
        upd1(2*nod+1,mid+1,r,p,x);
    v[nod]=v[2*nod]+v[2*nod+1];
}
void upd(int nod,int l,int r,int x){
    if(l==r){
        v[nod]=0;
        y[l]=i;
        return;
    }
    int mid=(l+r)/2;
    if(x<=v[2*nod])
        upd(2*nod,l,mid,x);
    else
        upd(2*nod+1,mid+1,r,x-v[2*nod]);
    v[nod]=v[2*nod]+v[2*nod+1];
}
int main(){
    f=fopen("schi.in","r");
    g=fopen("schi.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(f,"%d",&x[i]);
        upd1(1,1,n,i,1);
    }
    for(i=n;i>=1;i--){
        upd(1,1,n,x[i]);
    }
    for(i=1;i<=n;i++){
        fprintf(g,"%d\n",y[i]);
    }



    fclose(f);
    fclose(g);
    return 0;
}