Cod sursa(job #2101718)

Utilizator infomaxInfomax infomax Data 7 ianuarie 2018 20:58:23
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 n, v[30005], ans[30005], a[4*30005];

void upd( int st, int dr, int rad )
{
    if( st == dr )
    {
        a[rad] = 1;
        return;
    }
    int mij = (st+dr)/2;
    upd(st, mij, 2*rad);
    upd(mij+1, dr, 2*rad+1);
    a[rad] = a[2*rad] + a[2*rad+1];
}

int caut( int st, int dr, int rad, int sum )
{
    a[rad]--;
    int mij = (st + dr)/2;
    if( st == dr ) return st;
    if( sum <= a[2*rad] ) return caut(st, mij, 2*rad, sum);
    else return caut(mij+1, dr, 2*rad+1, sum-a[2*rad]);
}

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