Cod sursa(job #3366808)

Utilizator Mihail_SebiastianPandrea Mihail-Sebiastian Mihail_Sebiastian Data 4 octombrie 2026 14:15:55
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>

using namespace std;
int n, v[30001], aib[30001], rez[30001];
int ub(int x){
    return (x & (-x));
}
void add(int x, int y){
    int i;
    for(i = x; i <= n; i+=ub(i)){
        aib[i]+=y;
    }
}
int numarare(int x){
    int i, s = 0, st = 1, dr = n, mij;
    while(st < dr){
        mij = (st+dr)/2;
        s = 0;
        for(i = mij; i >= 1; i -= ub(i)){
            s += aib[i];
        }
        if(s >= x) dr = mij;
        else st = mij + 1;
    }
    return st;
}

int main()
{

    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    int x, i;
    scanf("%d", &n);
    for(i = 1; i <= n; i++){
        scanf("%d", &v[i]);
        add(i, 1);
    }
    for(i = n; i >= 1; i--){
        int p = numarare(v[i]);
        rez[p] = i;
        add(p, -1);
    }
    for(i = 1; i <= n; i++){
        printf("%d\n", rez[i]);
    }
    return 0;
}