Cod sursa(job #1488089)

Utilizator tudormaximTudor Maxim tudormaxim Data 17 septembrie 2015 21:45:43
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax = 30005;
int arb[3*nmax], poz;

void build(int nod, int st, int dr)
{
    if(st==dr)
    {
        arb[nod]=1;
        return;
    }
    int m=(st+dr)>>1;
    build(nod<<1, st, m);
    build(nod<<1 | 1, m+1, dr);
    arb[nod]=arb[nod<<1]+arb[nod<<1 | 1];
}

void query(int nod, int st, int dr, int val)
{
    if(st==dr)
    {
        arb[nod]=0;
        poz=st;
        return;
    }
    int m=(st+dr)>>1;
    if(val<=arb[nod<<1]) query(nod<<1, st, m, val);
    else query(nod<<1 | 1, m+1, dr, val-arb[nod<<1]);
    arb[nod]=arb[nod<<1]+arb[nod<<1 | 1];
}

int main()
{
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    int n, i, v[nmax], sol[nmax];
    scanf("%d", &n);
    for(i=1; i<=n; i++)
        scanf("%d", &v[i]);
    build(1, 1, n);
    for(i=n; i; i--)
    {
        query(1, 1, n, v[i]);
        sol[poz]=i;
    }
    for(i=1; i<=n; i++)
        printf("%d\n", sol[i]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}