Cod sursa(job #3319845)

Utilizator stefan_ciureaStefan Ciurea stefan_ciurea Data 3 noiembrie 2025 15:00:12
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax=3e4+5;
int v[Nmax],aib[Nmax],rez[Nmax],n;

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

void update(int poz, int val) {
    for (int i=poz; i<=n; i+=lsb(i)) {
        aib[i]+=val;
    }
}
int bs(int val) {
    int sol=0,s=0;
    for (int pas=(1<<15); pas>0; pas/=2) {
        if (sol+pas<=n && s+aib[sol+pas]<val) {
            s+=aib[sol+pas];
            sol+=pas;
        }
    }
    return sol+1;
}

int main()
{
    ifstream fin("schi.in");
    ofstream fout("schi.out");
    fin>>n;
    for (int i=1; i<=n; ++i) {
        fin>>v[i];
        update(i,1);
    }
    for (int i=n; i>=1; --i) {
        int poz=bs(v[i]);
        rez[poz]=i;
        update(poz,-1);
    }
    for (int i=1; i<=n; ++i) fout<<rez[i]<<endl;
    fin.close();
    fout.close();
    return 0;
}