Cod sursa(job #1048859)

Utilizator usermeBogdan Cretu userme Data 6 decembrie 2013 15:47:14
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme 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;
}