Cod sursa(job #3334359)

Utilizator IleaIlea Bogdan Ilea Data 17 ianuarie 2026 11:44:12
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<iostream>
#include<stack>
using namespace std;

#define NMAX 30003

int n,aib[NMAX],poz[NMAX];
stack<int>st;
void update(int ind,int val){
    // cerr<<"b: "<<val<<" - "<<ind<<endl;
    for(;ind<=n;ind+=(ind&-ind)){
        aib[ind]+=val;
    }
    // cerr<<"e: "<<val<<endl;
}
int query(int ind){
    int sum=0;
    for(;ind>0;ind-=(ind&-ind)){
        sum+=aib[ind];
    }
    return sum;
}
int binsearch(int sum){
    int st=1,dr=n,ans=n;
    while(st<=dr){
        int mij=(st+dr)/2;
        int q=query(mij);
        // cerr<<" st:"<<st<<" dr:"<<dr<<" q:"<<q<<" mij:"<<mij<<" sum:"<<sum<<endl;
        if(sum<=q){
            if(q==sum){
                ans=mij;
            }
            dr=mij-1;
        }else{
            st=mij+1;
        }
    }
    return ans;
}
int main(void){
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;++i){
        int x;
        cin>>x;
        st.push(x);
        update(i,1);
    }
    int i=n,p;
    for(;!st.empty();st.pop()){
        int x=st.top();
        p=binsearch(x);
        poz[p]=i;
        update(p,-1);
        --i;
    }
    for(i=1;i<=n;++i){
        cout<<poz[i]<<"\n";
    }
    return 0;
}