Cod sursa(job #1566416)

Utilizator bogdanmarin69Bogdan Marin bogdanmarin69 Data 12 ianuarie 2016 01:16:03
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
const int MAX = 30001;
int v[MAX], bit[MAX], n, sol[MAX];
void update(int pos){
    while(pos<=n){
        bit[pos]--;
        pos = pos + (pos & -pos);
    }
}
int getpos(int val){
    int pos = 1, ans = 0;
    while(pos<n) pos <<= 1;
    while(pos>0){
        if(ans+pos<=n){
            if(bit[ans+pos]<val){
                val -= bit[ans+pos];
                ans += pos;
            }
        }
        pos >>= 1;
    }
    return ans+1;
}
int main()
{
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>v[i];
    for(int i=1; i<=n; i++)
        bit[i] = i & -i;
    for(int i=n; i>=1; i--){
        int loc = getpos(v[i]);
        sol[loc] = i;
        update(loc);
    }
    for(int i=1; i<=n; i++)
        cout<<sol[i]<<'\n';
    return 0;
}