Cod sursa(job #2391100)

Utilizator rares1012Rares Cautis rares1012 Data 28 martie 2019 17:42:26
Problema Schi Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>

int v[30000];

int loc[30000];

int an[65536];

void update(int st,int dr,int nod,int p)
{
    if(st==dr)
    {
        an[p]+=1;
    }
    else
    {
        int mij=st+dr;
        mij/=2;
        if(nod<=mij)
            update(st,mij,nod,p*2);
        else update(mij+1,dr,nod,p*2+1);
        an[p]=an[p*2]+an[p*2+1];
    }
}

int get(int st,int dr,int p,int s)
{
    if(st==dr)
        return st;
    else
    {
        int mij=st+dr;
        mij/=2;
        int opens=(mij-st+1)-an[p*2];
        int opend=(dr-mij)-an[p*2+1];
        if(opens<s)
        {
            get(mij+1,dr,p*2+1,s-opens);
        }
        else get(st,mij,p*2,s);
    }
}

int main()
{
    int n,i,s,q;
    FILE*fi,*fo;
    fi=fopen("schi.in","r");
    fo=fopen("schi.out","w");
    fscanf(fi,"%d",&n);
    for(i=0; i<n; i++)
    {
        fscanf(fi,"%d",&v[n-i-1]);
    }
    for(i=0; i<n; i++)
    {
        q=get(1,n,1,v[i]);
        update(1,n,q,1);
        loc[q]=n-i;

    }
    for(i=1; i<=n; i++)
    {
        fprintf(fo,"%d\n",loc[i]);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}