Cod sursa(job #214701)

Utilizator catalina5catalina serban catalina5 Data 15 octombrie 2008 18:00:43
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include<fstream>

using namespace std;

int arb[100002],n,f[30002],q,w,a[30002];

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;
    }
    constr(nod<<1,st,(st+dr)/2);
    constr((nod<<1)+1,(st+dr)/2+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;
    }
    if(w<=arb[nod<<1])
        constr1(nod<<1,st,(st+dr)/2);
    else{
        w-=arb[nod<<1];
        constr1((nod<<1)+1,(st+dr)/2+1,dr);
    }
    arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}
void rez(){
for(int i=n;i>=1;i--)
    {
        w=a[i];
        q=i;
        constr1(1,1,n);
    }
}
int main(){
    citire();
    constr(1,1,n);
    rez();
    for(int i=1;i<=n;i++)
        fout<<f[i]<<"\n";
    fout.close();
    return 0;
}