Cod sursa(job #3312881)

Utilizator ilincaSSirbu Ilinca-Maria eu ilincaS Data 30 septembrie 2025 17:11:07
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <cmath>

using namespace std;

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

int v[524300];
int nr[30005];
int ans[30005];

int n, tot;

inline void update(int poz)
{
    poz=tot+poz-1;
    v[poz]=0;
    poz/=2;
    while(poz>0)
    {
        v[poz]=v[poz*2+1]+v[2*poz];
        poz/=2;
    }
}

int query(int ind, int st, int dr, int poz)
{
    if(st==dr)
    {
        update(ind-tot+1);
        return ind-tot+1;
    }
    else
    {
        int mij=(st+dr)/2;
        if(poz<=v[2*ind])
        {
            return query(2*ind, st, mij, poz);
        }
        else
        {
            poz-=v[2*ind];
            return query(2*ind+1, mij+1, dr, poz);
        }
    }
}

int main()
{
    cin>>n;
    tot = log2(n) + 1;
    tot = (1<<tot);
    for(int i=1; i<=n; i++)
    {
        cin>>nr[i];
    }
    for(int i=tot; i<tot+n; i++)
    {
        v[i]=1;
    }
    for(int i=tot-1; i>=1; i--)
    {
        v[i]=v[2*i]+v[2*i+1];
    }
    for(int i=n; i>=1; i--)
    {
        ans[query(1, 1, tot, nr[i])]=i;
    }
    for(int i=1; i<=n; i++)
    {
        cout<<ans[i]<<'\n';
    }


    return 0;
}