Cod sursa(job #2755696)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 27 mai 2021 23:12:26
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>

#define int long long

using namespace std;

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

int n, v[30303];
int aib[30303], ans[30303];

void update(int poz, int val)
{
    while(poz <= n)
    {
        aib[poz] += val;
        poz += (poz & (-poz));
    }
}

int pozitie(int val)
{
    int r = 0, pas = 1 << 15;
    while(pas != 0)
    {
        if(r + pas <= n && aib[r + pas] < val)
        {
            val -= aib[r + pas];
            r += pas;
        }
        pas /= 2;
    }
    return r + 1;
}

int32_t main()
{
    fin >> n;
    for(int i = 1; i <= n; i ++)
    {
        fin >> v[i];
        update(i, 1);
    }
    for(int i = n; i >= 1; i --)
    {
        int poz = pozitie(v[i]);
        ans[poz] = i;
        update(poz, -1);
    }
    for(int i = 1; i <= n; i ++)
    {
        fout << ans[i] << ' ';
    }
    return 0;
}