Cod sursa(job #2035248)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 9 octombrie 2017 09:31:46
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

#define Nmax 30011

using namespace std;

int v[Nmax],aint[4*Nmax],n,poz[Nmax],i;

int update (int st , int dr , int nod)
{
    int mij=(st+dr)/2;
    if(st==dr)
    {
        aint[nod]=1;
        return 0;
    }
    aint[nod]=dr-st+1;
    update(st,mij,nod*2);
    update(mij+1,dr,nod*2+1);
}

int query (int st , int dr , int nod ,int sum)
{
    aint[nod]--;
    int mij=(st+dr)/2;
    if(st==dr)
    {
        return st;
    }
    else
        if(sum<=aint[nod*2])
    {
        return query(st,mij,nod*2,sum);
    }
    else
    {
        return query(mij+1,dr,nod*2+1,sum-aint[2*nod]);
    }
}

int main()
{
    ifstream fin ("schi.in");
    ofstream fout ("schi.out");
    fin>>n;
    update(1,n,1);
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    for(i=n;i>=1;i--)
    {
        poz[query(1,n,1,v[i])]=i;
    }
    for(i=1;i<=n;i++)
    {
        fout<<poz[i]<<'\n';
    }
    return 0;
}