Cod sursa(job #2104788)

Utilizator infomaxInfomax infomax Data 12 ianuarie 2018 11:53:31
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;

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

int v[30004], arb[4*30002], n, poz[30004];

void Build( int l, int r, int rad )
{
    if(l==r)
    {
        arb[rad] = 1;
        return;
    }
    int mid = (l+r)/2;
    Build(l, mid, rad*2);
    Build(mid+1, r, rad*2+1);
    arb[rad] = arb[2*rad]+arb[2*rad+1];
}

int Query(int l, int r, int rad, int sum)
{
    arb[rad]--;
    int mid = (l+r)/2;
    if(l==r) return l;
    if( sum <= arb[2*rad] ) return Query(l, mid, 2*rad, sum);
    return Query(mid+1, r, 2*rad+1, sum-arb[2*rad]);
}

int main()
{
    F >> n;
    for( int i = 1; i <= n; ++ i ) F >> v[i];
    Build(1, n, 1);
    for( int i = n; i > 0; -- i )
    {
        poz[Query(1, n, 1, v[i])] = i;
    }
    for( int i = 1; i <= n; ++ i ) G << poz[i]<<'\n';
    return 0;
}