Cod sursa(job #212536)

Utilizator catalina5catalina serban catalina5 Data 5 octombrie 2008 20:06:21
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<iostream>
#include<fstream>

using namespace std;

int n,arb[30001],f[30001],a[30001],q,w;

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

void citire(){
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
}

void constr(int nod,int st,int dr){
    if(st>dr)
        return;
    if(st==dr){
        arb[nod]=1;
        return;
    }
    int mij=(st+dr)>>1;
    constr(nod<<1,st,mij);
    constr((nod<<1)+1,mij+1,dr);
    arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}

void constr1(int nod,int st,int dr){
    if(st>dr)
        return;
    if(st==dr){
        arb[nod]=0;
        f[st]=q;
        return;
    }
    int mij=(st+dr)>>1;
    if(w<=arb[nod<<1])
        constr1(nod<<1,st,mij);
    else{
        w=w-arb[nod<<1];
        constr1((nod<<1+1),mij+1,dr);
    }
    arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}

void rez(){
    for(int i=n;i>=n;i--){
            w=a[i];
            q=i;
            constr1(1,1,n);
    }
}

void afis(){
    for(int i=1;i<=n;i++)
        fout<<f[i]<<"\n";
}

int main(){
    citire();
    constr(1,1,n);
    rez();
    afis();
    fin.close();
    fout.close();
    return 0;
}