Cod sursa(job #1854842)

Utilizator saba_alexSabadus Alex saba_alex Data 23 ianuarie 2017 11:48:23
Problema Schi Scor 100
Compilator cpp Status done
Runda gym_emag_avansati_2016 Marime 1.05 kb
#include <iostream>
#include <fstream>
#define MAX 30005

using namespace std;

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

int liber[4*MAX], n, v[MAX], clas[MAX];

void build(int nod, int st, int dr){

    if(st==dr)
        liber[nod]=1;
    else{
        int mij=(st+dr)/2;
        build(nod*2, st, mij);
        build(nod*2+1, mij+1, dr);
        liber[nod]=dr-st+1; /// nr de poz libere pe intervale
    }
}

int clasament(int nod, int st, int dr, int inter, int finall){

    if(st==dr){
        liber[nod]=0;
        clas[st]=finall;
    }
    else{
        int mij=(st+dr)/2;
        if(inter <= liber[nod*2])
            clasament(nod*2, st, mij, inter, finall);
        else
            clasament(nod*2+1, mij+1, dr, inter-liber[nod*2], finall);
        liber[nod]--;
    }
}

int main()
{
    fin>>n;
    for(int i=1; i<=n ;i++)
        fin>>v[i];

    build(1,1,n);

    for(int i=n; i>=1; --i)
        clasament(1,1,n,v[i],i);

    for(int i=1; i<=n; ++i)
        fout<<clas[i]<<'\n';
    return 0;
}