Cod sursa(job #2988638)

Utilizator C_R_I_S_T_I_2_3Cristi Gavrila C_R_I_S_T_I_2_3 Data 5 martie 2023 10:16:11
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
int aint[100005], v[30005], sol[30005];

void Build(int nod, int st, int dr)
{
    if(st==dr)
    {
        aint[nod]=1;
        return;
    }
    int mij=(st+dr)/2;
    Build(2*nod, st, mij);
    Build(2*nod+1, mij+1, dr);
    aint[nod]=aint[2*nod]+aint[2*nod+1];
}

int Update(int nod, int st, int dr, int x)
{
    int rez;
    if(st == dr)
    {
        aint[nod] = 0;
        return st;  
    }
    int mij = (st + dr) / 2;
    if(aint[2 * nod] >= x)
        rez = Update(2 * nod, st, mij, x);
    else
        rez = Update(2* nod + 1, mij + 1, dr, x - aint[2 * nod]);
    aint[nod] --;
    return rez;
}
int main()
{
    fin >> n;
    Build(1, 1, n);
    for(int i = 1; i <= n; i ++)
        fin >> v[i];
    for(int i = n; i >= 1; i --)
        sol[Update(1, 1, n, v[i])] = i; 
    for(int i = 1; i <= n; i ++)
        fout << sol[i] << "\n";
    return 0;
}