Cod sursa(job #2972979)

Utilizator Alex_DiaconuDiaconu Alexandru Alex_Diaconu Data 30 ianuarie 2023 19:11:06
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;

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

const int N=120005;
int v[N], arb[N], afis[N], newn=1;

int cuerry (int s,int d,int ind,int k)
{
    if (ind>=newn)
    {
        return ind;
    }
    if (arb[ind*2]>=k)
    {
        cuerry(s, (s+d)/2, ind*2, k);
    }
    else
    {
        k-=arb[ind*2];
        cuerry((s+d)/2+1, d, ind*2+1, k);
    }
}

void update (int x)
{
    arb[x]--;
    while(x>=1)
    {
        x/=2;
        arb[x]--;
    }
    return;
}

int main()
{
    int n;
    cin >> n;
    while (newn<n)
    {
        newn*=2;
    }
    for (int i=1; i<=n; i++)
    {
        cin >> v[i];
        arb[newn+i-1]=1;
    }
    for (int i=newn-1; i>=1; i--)
    {
        arb[i]=arb[i*2]+arb[i*2+1];
    }
    for (int i=n; i>=1; i--)
    {
        int p=cuerry(1, newn, 1, v[i]);
        afis[p-newn+1]=i;
        update(p);
    }
    for (int i=1; i<=n; i++)
    {
        cout << afis[i] << "\n";
    }
    return 0;
}