Cod sursa(job #3156330)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 11 octombrie 2023 11:05:09
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<iostream>
#include<stdio.h>

using namespace std;

const int NMAX = 3e4 + 5;
int n, arb[4 * NMAX], v[NMAX], ans[NMAX];

void build(int idx, int st, int dr)
{
    if(st == dr)
    {
        arb[idx] = 1;
        return;
    }
    
    int mij = (st + dr) / 2;
    build(idx * 2, st, mij);
    build(idx * 2 + 1, mij + 1, dr);
    
    arb[idx] = arb[idx * 2] + arb[idx * 2 + 1];
}

void update(int idx, int st, int dr, int val, int pos)
{
    if(st == dr)
    {
        ans[st] = pos;
        arb[idx] = 0;
        return;
    }
    
    int mij = (st + dr) / 2;
    if(val <= arb[idx * 2])
        update(idx * 2, st, mij, val, pos);
    else
        update(idx * 2 + 1, mij + 1, dr, val - arb[idx * 2], pos);
    arb[idx] = arb[idx * 2] + arb[idx * 2 + 1];
}

int main()
{
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> v[i];
        
    build(1, 1, n);
    
    for(int i = n; i >= 1; i--)
        update(1, 1, n, v[i], i);
    
    for(int i = 1; i <= n; i++)
        cout << ans[i] << "\n";
}