Cod sursa(job #3229196)

Utilizator tonealexandruTone Alexandru tonealexandru Data 14 mai 2024 12:19:05
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;
int aint[120005],rez[30005],v[30005];

void update(int nod, int from, int to, int poz, int val)
{
    int mij=(from+to)/2;
    if(to==from)
    {
        aint[nod]=val;
        return ;
    }
    nod*=2;

    if(poz<=mij) update(nod, from, mij, poz, val);
    else update(nod+1, mij+1, to, poz, val);

    aint[nod/2]=aint[nod] + aint[nod+1];
}

int query(int nod, int from, int to, int val)
{
    int mij=(from+to)/2;
    if(from==to) return from;
    nod*=2;

    if(aint[nod]<val) return query(nod+1, mij+1, to, val-aint[nod]);

    return query(nod, from, to, val);
}

int main()
{
    ifstream cin("schi.in");
    ofstream cout("schi.out");
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,q,l;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i];
        update(1,1,n,i,1);
    }

    for(int i=n;i>=1;i--)
    {
        int poz = query(1,1,n,v[i]);
        update(1,1,n,poz,-1);
        rez[poz]=i;
    }

    for(int i=1;i<=n;i++)
        cout<<rez[i]<<'\n';


    return 0;
}