Cod sursa(job #3249510)

Utilizator TheodosiusOancea Teodor Stefan Theodosius Data 16 octombrie 2024 19:02:40
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
int n,aib[30001],v[30001],r[30001];
void upd(int i,int val){
    while(i<=n){
        aib[i]+=val;
        i+=(i&-i);
    };
};
int get(int i){
    int sum=0;
    while(i>0){
        sum+=aib[i];
        i-=(i&-i);
    };
    return sum;
};
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>v[i];
        upd(i,1);
    };
    for(int i=n;i>0;i--){
        int s=1,d=n+1;
        while(s<d){
            int m=(s+d)/2;
            int x=get(m);
            if(x>=v[i]) d=m;
            else if(x<v[i]) s=m+1;
            else{
                s=m;
                break;
            }
        };
        r[s]=i;
        upd(s,-1);
    };
    for(int i=1;i<=n;i++){
        cout<<r[i]<<"\n";
    }
    return 0;
}