Cod sursa(job #2011515)

Utilizator BeFeSeuDaniel Dani Danutu BeFeSeu Data 16 august 2017 15:18:35
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int Nmax = 30000 + 5;
int a[Nmax], poz[Nmax], arb[4 * Nmax], n, pozitie;
void build(int nod, int left, int right)
{
    int mid = left + (right - left) / 2;
    if(left == right)
    {
        arb[nod] = 1;
        return;
    }

    build(2 * nod, left ,mid);
    build(2 * nod + 1,mid + 1, right);
    arb[nod] = arb[2* nod] + arb[2 * nod + 1];
}
void upd(int nod, int left, int right, int rest)
{
    int mid = left +(right - left) / 2;

    if(left == right)
    {
        arb[nod] = 0;
        pozitie = left;
        return;
    }

    if(rest > arb[2 * nod])upd(2 * nod + 1, mid + 1 ,right , rest - arb[2 * nod]);
    else upd(2 * nod, left, mid, rest);

    arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
int main()
{
    fin >> n;
    build(1, 1, n);
    for(int i = 1; i <= n; ++i)fin >> a[i];
    for(int i = n; i >= 1; --i)
    {
        upd(1, 1, n, a[i]);
        poz[pozitie] = i;
    }
    for(int i = 1; i <= n; ++i)
        fout << poz[i] << '\n';
    return 0;
}