Cod sursa(job #2129914)

Utilizator KemyKoTeo Virghi KemyKo Data 13 februarie 2018 11:30:34
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#define NMAX 30001

using namespace std;

ifstream f("schi.in");
ofstream g("schi.out");

int n, x, i;
int a[NMAX], ans[NMAX], v[120011];

void build(int nod, int l, int r, int x)
{
    if(l==r){
        v[nod]=1;
        return;
    }
    int m = ( l + r) / 2;

    if(x<=m) build(nod * 2, l, m, x);
    else build(nod * 2 + 1, m + 1, r, x);

    v[nod] = v[nod * 2] + v[nod * 2 + 1];
}

void query(int nod, int l, int r, int val, int poz)
{
    if(l==r){
        ans[l]=poz;
        v[nod]=0;
        return;
    }
    int m = (l + r) / 2;

    if(val<=v[nod*2]) query(nod * 2, l, m, val, poz);
    else query(nod * 2 + 1, m + 1, r, val - v[nod * 2], poz);

    v[nod]=v[nod*2]+v[nod*2+1];
}

int main()
{
    f>>n;
    for(i=1;i<=n;i++){
        build(1,1,n,i);
        f>>a[i];
    }

    for(i=n;i>0;i--)
        query(1,1,n,a[i],i);

    for(i=1;i<=n;i++)
        g<<ans[i]<<'\n';
    return 0;
}