Cod sursa(job #3259955)

Utilizator amalia_ghicaAmalia Ghica amalia_ghica Data 28 noiembrie 2024 16:09:49
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>

using namespace std;

ifstream cin("schi.in");
ofstream cout("schi.out");

int v[30005], ans[30005], st[120005];
void update(int nod, int from, int to, int poz, int val){
    if(from == to){
        st[nod] += val;
        return;
    }
    int mid = (from + to) / 2;
    if(poz <= mid){
        update(nod * 2, from, mid, poz, val);
    }else{
        update(nod * 2 + 1, mid + 1, to, poz, val);
    }
    st[nod] = st[nod * 2] + st[nod * 2 + 1];
}
int query(int nod, int l, int r, int val){
    int sum = 0;
    if(l==r){
        return l;
    }
    int mid = (l+r) / 2;
    nod*=2;
    if(st[nod]<val)
    {
        return query(nod+1, mid+1, r, val-st[nod]);
    }
    return query(nod, l, mid, val);

}
int main()
{
    int n, x;
    cin >> n;
    for(int i=1;i<=n;i++)
    {
        cin >> v[i];
        update(1, 1, n, i, 1);
    }
    for(int i = n; i > 0; i--){
        x=query(1, 1, n, v[i]);
        ans[x]=i;
        update(1, 1, n, x, -1);
    }
    for(int i=1; i<=n; i++)
    {
        cout<<ans[i]<<'\n';
    }
    return 0;
}