Cod sursa(job #1965053)

Utilizator RaZxKiDDavid Razvan RaZxKiD Data 13 aprilie 2017 21:55:35
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>

#define zeros(x) ((-x)&(x))

using namespace std;

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

int n;
int AIB[30002];
int V[30002];
int SOL[30002];

void add(int x, int val){
    for(int i=x;i<=n;i+=zeros(i))
        AIB[i]+=val;
}
int sum(int x){
    int s=0;
    for(int i=x;i>=1;i-=zeros(i))
        s+=AIB[i];
    return s;
}
int query(int x){
    int st=1,dr=n,mij,sol;
    while(st<=dr){
        mij=(st+dr)/2;
        if(sum(mij)>=x){
            dr=mij-1;
            sol=mij;
        }
        else st=mij+1;
    }
    return sol;
}
void read(){
    in>>n;
    for(int i=1,x;i<=n;i++){
        in>>V[i];
        add(i,1);
    }
}
void solve(){
    int q;
    for(int i=n;i>=1;i--){
        q=query(V[i]);
        SOL[q]=i;
        add(q,-1);
    }
    for(int i=1;i<=n;i++){
        out<<SOL[i]<<"\n";
    }
}
int main(){
    read();
    solve();
    return 0;
}