Cod sursa(job #3259943)

Utilizator ilincaSSirbu Ilinca Maria ilincaS Data 28 noiembrie 2024 15:45:44
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
using namespace std;

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

//#pragma GCC optimize ("O3")
int st[120005], v[30005], rez[30005];
void update(int node, int from, int to, int poz, int val)
{
    if(from==to)
    {
        st[node]+=val;
        return;
    }
    int mid=(from+to)/2;
    if(poz<=mid)
    {
        update(node*2, from, mid, poz, val);
    }
    else
    {
        update(node*2+1, mid+1, to,  poz, val);
    }
    st[node]=st[node*2]+st[node*2+1];
}

int query(int nod, int lf, int dr, int val)
{
    int smin=0;
    if(lf==dr)
        return lf;
    int mid=(lf+dr)/2;
    nod*=2;
    if(st[nod]<val)
    {
        return query(nod+1, mid+1, dr, val-st[nod]);
    }

    return query(nod, lf, mid, val);
}



int main()
{
    int n, a;
    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--)
    {
        a=query(1, 1, n, v[i]);
        update(1, 1, n, a, -1);
        rez[a]=i;
    }
    for(int i=1; i<=n; i++)
    {
        cout<<rez[i]<<'\n';
    }

    return 0;
}