Cod sursa(job #3357783)

Utilizator TeocipTudorica Ciprian Teodor Teocip Data 13 iunie 2026 14:49:34
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
using namespace std;

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

const int maxN = 3e4;
int arr[maxN], ans[maxN], aib[maxN];

void actualizare(int n, int poz, int val){
    while(poz <= n){
        aib[poz] += val;
        int p2 = (poz & (-poz));
        poz += p2;
    }
}

int interogare(int n, int poz){
    int s = 0;
    while(poz > 0){
        s += aib[poz];
        int p2 = poz & (-poz);
        poz -= p2;
    }
    return s;
}

int caut_bin(int n, int target){
    int st = 0, dr = n, rez = -1;
    while(st <= dr){
        int mij = (st + dr) / 2;
        if(interogare(n, mij) >= target){
            rez = mij;
            dr = mij - 1;
        }else{
            st = mij + 1;
        }
    }

    return rez;
}

int main(){
    int n;
    cin >> n;

    for(int i = 0; i < n; i++){
        cin >> arr[n - 1 - i];
    }
    for(int i = 1; i <= n; i++){
        actualizare(n, i, 1);
    }
    for(int i = 0; i < n; i++){
        int cb = caut_bin(n, arr[i]);

        ans[cb - 1] = n - i;
        actualizare(n, cb, -1);
    }

    for(int i = 0; i < n; i++) cout << ans[i] << '\n';
    return 0;
}