Cod sursa(job #2035217)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 9 octombrie 2017 09:02:12
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

#define Nmax 30011

using namespace std;

int v[Nmax],aint[2*Nmax],n,poz[Nmax];

int update (int st , int dr , int nod)
{
    int mij=(st+dr)/2;
    if (st==dr)
    {
        aint[nod]==1;
        return 69;
    }
    else
    {
        v[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)
{
    int mij=(st+dr)/2;
    aint[nod]--;
    if (st==dr)
    {
        return nod;
    }
    else
    {
        if (aint[2*nod]>=sum)
        {
            return query (st , mij , nod*2 , sum);
        }
        else
        {
            return query (mij+1 , dr , nod*2+1 , sum-v[2*nod]);
        }
    }
}

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