Cod sursa(job #1052394)

Utilizator IonSebastianIon Sebastian IonSebastian Data 11 decembrie 2013 11:14:07
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

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

const int N = 30001;
int v[N], t[1<<18], poz, val2, final[N];

void update(int p, int st, int dr){
    if(st == dr){
        t[p] = val2;
        return;
    }
    int m = (st+dr)/2;
    update(2*p, st, m);
    update(2*p+1, m+1, dr);
    t[p] = t[2*p] + t[2*p+1];
}

void search(int p, int st, int dr, int val){
    if(st == dr){
        poz = st;
        return;
    }
    int m = (st+dr)/2;
    if(t[2*p] >= val){
        search(2*p, st, m, val);
    } else {
        val -= t[2*p];
        search(2*p+1, m+1, dr, val);
    }
}

int main()
{
    int n, i;
    in >> n;
    for(i = 1; 1 <= n; i++){
        val2 = 1;
        update(1,1,n);
        in >> v[i];
    }
    for(i = n ; i > 0; i--){
        search(1,1,n,v[i]);
        final[poz] = i;
        val2 = 0;
        update(1,1,n);
    }
    for(i = 1; i <= n; i++){
        out << final[i] << "\n";
    }
    return 0;
}