Cod sursa(job #3322704)

Utilizator NeamtuMateiNeamtu Matei-Constantin NeamtuMatei Data 15 noiembrie 2025 11:45:37
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
using namespace std;

#define lsb(x) (x & -x)

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

const int MAXN = 3e4;

int n, x;
int v[MAXN+1], aib[MAXN+1], clasament[MAXN+1];

void sub(int poz) {
    for (int i = poz; i <= n; i += lsb(i))
        aib[i]--;
}

int suma(int poz) {
    int sm = 0;
    for (int i = poz; i >= 1; i -= lsb(i))
        sm += aib[i];
    
    return sm;
}

int cbinSt(int val) {
    int st = 1, dr = n, poz = 0;
    
    while (st <= dr) {
        int mid = (st + dr) / 2;
        int sMid = suma(mid);
        
        if (val == sMid) 
            poz = mid;
        
        if (val <= sMid)
            dr = mid - 1;
        else
            st = mid + 1;
        
    }
    
    return poz;
}

int main() {
    in >> n;
    
    for (int i = 1; i <= n; i++)
        in >> v[i],
        aib[i] = lsb(i); // init
    
    for (int i = n; i >= 1; i--) {
        int poz = cbinSt(v[i]);
        
        clasament[poz] = i;
        sub(poz);
    }
    
    for (int i = 1; i <= n; i++)
        out << clasament[i] << '\n';

    return 0;
}