Cod sursa(job #1550661)

Utilizator armandpredaPreda Armand armandpreda Data 14 decembrie 2015 14:21:25
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

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

const int LIM=30005;
int n, v[LIM], aib[LIM], sol[LIM];
int zeros(int x)
{
    return x&(x-1)^x;
}
int query(int poz)
{
    int sum=0;
    for(; poz!=0; poz-=zeros(poz))
        sum+=aib[poz];
    return sum;
}
int caut_bin(int val)
{
    int st=1, dr=n, mj;
    while(st<=dr)
    {
        mj=(st+dr)>>1;
        if(query(mj)<val)
            st=mj+1;
        else
            dr=mj-1;
    }
    return st;
}
void update(int poz, int val)
{
    for(; poz<=n; poz+=zeros(poz))
        aib[poz]+=val;
}
int main()
{
    cin>>n;
    for(int i=1; i<=n; ++i)
    {
        cin>>v[i];
        update(i, 1);
    }
    for(int i=n; i>=1; --i)
    {
        int unde=caut_bin(v[i]);
        sol[unde]=i;
        update(unde, -1);
    }
    for(int i=1; i<=n; ++i)
        cout<<sol[i]<<'\n';
    return 0;
}