Cod sursa(job #1033347)

Utilizator LizzardStanbeca Theodor-Ionut Lizzard Data 16 noiembrie 2013 19:29:26
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
using namespace std;

ifstream fin ("schi.in");
ofstream fout ("schi.out");

void erase(int , int , int , int s, int &);
int build(int , int , int );
int n,v[100000],z[30001];

int main()
{
    int i,x,poz,w[30001];
    fin>>n;
    v[1]=build(1,n,1);
    for(i=n;i>=1;i--)
        fin>>w[i];
    for(i=1;i<=n;i++)
    {
        erase(1,n,1,w[i],poz);
        z[poz]=n-i+1;
    }
    for(i=1;i<=n;i++)
        fout<<z[i]<<"\n";


    return 0;
}

void erase(int li, int ls, int i, int s, int &a)
{
    if(li==ls)
    {
        v[i]=0;
        a=li;
        return;
    }

    int mij=(li+ls)/2;
    if(s>v[2*i])
    {
        v[2*i+1]--;
        erase(mij+1,ls,2*i+1,s-v[2*i],a);
    }
    else
    {
        v[2*i]--;
        erase(li,mij,2*i,s,a);
    }
    return;
}

int build(int li, int ls, int i)
{
    if(li==ls)
    {
        v[i]=1;
        return v[i];
    }
    v[i]=build(li,(li+ls)/2,2*i)+build((li+ls)/2+1,ls,2*i+1);
    return v[i];
}