Cod sursa(job #2908396)

Utilizator AswVwsACamburu Luca AswVwsA Data 3 iunie 2022 10:54:37
Problema Schi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
//these are confusing times
#include <fstream>
#include <cstdio>
#include <deque>
#include <cmath>
#include <iomanip>
#define ll long long
using namespace std;

int n;
int aib[30003];
int v[30003], ans[30003];
int query(int val)
{
    int ans = 0;
    while (val)
    {
        ans += aib[val];
        val -= val & -val;
    }
    return ans;
}

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

int main()
{
    ifstream cin("schi.in");
    ofstream cout("schi.out");
    int i;
    cin >> n;
    for (i = 1; i <= n; i++)
        cin >> v[i];
    for (i = n; i >= 1; i--)
    {
        int med, st = 1, dr = n, sol = -1;
        while (st <= dr)
        {
            med = ((st + dr) >> 1);
            if (med - query(med) >= v[i])
            {
                sol = med;
                dr = med - 1;
            }
            else
                st = med + 1;
        }
        ans[sol] = i;
        update(sol, 1);
    }
    //cout << "\n\n";
    for (i = 1; i <= n; i++)
        cout << ans[i] << "\n";
}