Cod sursa(job #1183060)

Utilizator usermeBogdan Cretu userme Data 8 mai 2014 14:41:41
Problema Schi Scor 100
Compilator cpp Status done
Runda aib-uri Marime 1.07 kb
#include<cstdio>
 
int suma[65600];
 
int poz,val;
 
FILE*f=fopen("schi.in","r");
FILE*h=fopen("schi.out","w");
 
void actualizare(int nod, int st,int dr){
        if(st==dr)suma[nod]=val;
            else{
                int m;
                m=(st+dr)/2;
                if(poz<=m)actualizare(nod*2,st,m);
                    else actualizare(nod*2+1,m+1,dr);
                suma[nod]=suma[nod*2]+suma[nod*2+1];
    }
}
 
void cauta(int nod,int st,int dr,int cat){
    if(st==dr)poz=st;
        else{
          int m;
          m=(st+dr)/2;
          if(cat<=suma[nod*2])cauta(nod*2,st,m,cat);
            else cauta(nod*2+1,m+1,dr,cat-suma[nod*2]);
      }
}
 
int main(){
    int n,i,cat[30001],unde[30001];
    fscanf(f,"%d",&n);
    for ( poz=1;poz<=n;++poz ){
        val=1;
        actualizare(1,1,n);
        fscanf(f,"%d",&cat[poz]);
    }
 
    for(i=n;i>0;i--){
        cauta(1,1,n,cat[i]);
        unde[poz]=i;
        val=0;
        actualizare(1,1,n);
    }
    for(i=1;i<=n;i++)
        fprintf(h,"%d\n",unde[i]);
    return 0;
}