Cod sursa(job #1538553)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 29 noiembrie 2015 13:13:55
Problema Schi Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

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

const int LIM = 3e4 + 5;
const int NMax = 2 * LIM;

int A[LIM], B[LIM];
int Aib[NMax];

void BuildTree(int node, int lo, int hi){
    if(lo > hi) return;
    if(lo == hi){
        Aib[node] = 1;
        return;
    }
    int mid = (lo + hi) >> 1;
    BuildTree(node * 2, lo, mid);
    BuildTree(node * 2 + 1, mid + 1, hi);
    Aib[node] = hi - lo + 1;
}

void Update(int node, int lo, int hi, int pos, int i){
    if(lo == hi){
        Aib[node] = 0;
        B[lo] = i;
        return;
    }
    int mid = (lo + hi) >> 1;
    if(pos <= Aib[node * 2]){
        Update(node * 2, lo, mid, pos, i);
    } else {
        Update(node * 2 + 1, mid + 1, hi, pos - Aib[node * 2], i);
    }
    Aib[node]--;
}

int main(){
    int n, x;
    fin >> n;
    for(int i = 1; i <= n; i++) fin >> A[i];
    BuildTree(1, 1, n);
    for(int i = n; i > 0; i--) Update(1, 1, n, A[i], i);
    for(int i = 1; i <= n; i++) fout << B[i] << "\n";
    return 0;
}