Cod sursa(job #2748815)

Utilizator As932Stanciu Andreea As932 Data 3 mai 2021 15:52:34
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 3e4 + 5;

int n, v[nmax], aib[nmax], ans[nmax];

int bt(int x){
    return x & (-x);
}

void update(int pos, int val){
    for(int i = pos; i <= n; i += bt(i))
        aib[i] += val;
}

void read(){
    fin >> n;

    for(int i = 1; i <= n; i++){
        fin >> v[i];
        update(i, 1);
    }
}

int bs(int val){
    int idx = 0, p = 1 << 20;

    for(; p > 0; p /= 2)
        if(idx + p <= n)
            if(aib[idx + p] < val){
                idx += p;
                val -= aib[idx];
            }

    return idx + 1;
}

void solve(){
    for(int i = n; i >= 1; i--){
        int pos = bs(v[i]);
        ans[pos] = i;
        update(pos, -1);
        //cout << i << " " << v[i] << " " << pos << "\n";
    }
}

void print(){
    for(int i = 1; i <= n; i++)
        fout << ans[i] << "\n";
}

int main()
{
    read();
    solve();
    print();

    return 0;
}