Cod sursa(job #972255)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 11 iulie 2013 12:53:43
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

#define st (nod<<1)
#define dr ((nod<<1)|1)
#define mij ((a+b)>>1)

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

const int N = 30000;
const int L = N*3;

int n, a[N], v[L], sol[N];

int Init(int nod, int a, int b)
{
    if(a > b) return 0;
    if(a == b) v[nod] = 1;
    else v[nod] = Init(st, a, mij) + Init(dr, mij+1, b);
    return v[nod];
}

int Query(int nod, int a, int b, int val)
{
    v[nod]--;
    if(a == b) return mij;
    if(v[st] >= val)
        return Query(st, a, mij, val);
    else
        return Query(dr, mij+1, b, val-v[st]);
}

int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>a[i];
    Init(1, 1, n);
    for(int i=n; i>0; i--)
        sol[Query(1, 1, n, a[i])] = i;
    for(int i=1; i<=n; i++)
        fout<<sol[i]<<'\n';
    return 0;
}