Cod sursa(job #3363004)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 13 august 2026 12:40:46
Problema Schi Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
using namespace std;
const int N = 30000;
int a[N + 1], v[N], sol[N + 1];
void update(int node, int le, int ri, int val, int poz)
{
    if (le == ri)
    {
        a[node] = val;
        return;
    }
    int mij = (le + ri) / 2;
    if (poz <= mij)
    {
        update(2 * node, le, mij, val, poz);
    }
    else
    {
        update(2 * node + 1, mij + 1, ri, val, poz);
    }
    a[node] = a[2 * node] + a[2 * node + 1];
}
int query(int node, int le, int ri, int val)
{
    if (le == ri)
    {
        if (val == 0)
            return le - 1;
        return le;
    }
    int mij = (le + ri) / 2;
    if (a[2 * node] < val)
    {
        return query(2 * node + 1, mij + 1, ri, val - a[2 * node]);
    }
    else
    {
        return query(2 * node, le, mij, val);
    }
}
int main()
{
    ifstream cin("schi.in");
    ofstream cout("schi.out");
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int i, n, x;
    cin >> n;
    for (i = 0; i < n; i++)
    {
        cin >> v[n - i - 1];
        update(1, 1, n, 1, i + 1);
    }
    for (i = 0; i < n; i++)
    {
        // sol[i] = query(v[i]) poz libere;
        x = query(1, 1, n, v[i]);
        sol[x] = n - i;
        update(1, 1, n, 0, x);
    }
    for (i = 1; i <= n; i++)
    {
        cout << sol[i] << "\n";
    }
    return 0;
}