Cod sursa(job #3332222)

Utilizator InformaticianInDevenire1Munteanu Mihnea Gabriel InformaticianInDevenire1 Data 5 ianuarie 2026 11:32:12
Problema Schi Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

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

int aib[30005];
int v[30005];
int ans[30005];
int n;

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

int Query(int pos){
    int ans = 0;
    for (int i=pos;i>0;i-=LSB(i)){
        ans += aib[i];
    }
    return ans;
}

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

int BinarySearch(int a){
    int ans = 0,sum = 0;
    for (int pas=(1LL<<20);pas>0;pas/=2){
        if (ans+pas>n) continue;
        if (sum+aib[pas+ans]+1<=a){
            ans += pas;
            sum += aib[pas];
        }
    }
    return ans;
}

signed main()
{
    fin >> n;
    for (int i=1;i<=n;++i){
        fin >> v[i];
        Update(i,1);
    }
    for (int i=n;i>=1;--i){
        int ind = BinarySearch(v[i]);
        if (Query(ind)<v[i]) ind++;
        Update(ind,-1);
        ans[ind] = i;
        //cout << i << ' ' << ind << '\n';
    }
    for (int i=1;i<=n;++i){
        fout << ans[i] << '\n';
    }
    return 0;
}