Cod sursa(job #1764870)

Utilizator enouGhAbu Ras Mohamed Ata Radu enouGh Data 25 septembrie 2016 23:58:05
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<bits/stdc++.h>
using namespace std;

int dr,st,v[30001],L[30001],b[30001] ,i,n;

void actualizare(int nod ,int st ,int dr ,int a ,int b)
{
    if ( st == dr )
    {
        v[nod] = b;
        return;
    }else
    {
        int mijloc = (st + dr)/2;
        if ( a <= mijloc )
            actualizare(2 * nod , st , mijloc , a , b);
        else
            actualizare(2*nod + 1 , mijloc + 1 , dr , a , b );

        v[nod] = v[ 2*nod ] + v[ 2*nod+1 ];
    }
}

void interogare(int nod , int st , int dr ,int a)
{
    if ( st == dr )
    {
        v[nod] = 0;
        L[st] = i;
        return;
    }else
    {
        int mijloc = (st + dr)/2;
        if( a <= v[ 2*nod ])
            interogare( 2 * nod , st , mijloc , a);
        else
            interogare( 2 * nod + 1, mijloc + 1 , dr ,a - v[2*nod]);
        v[nod] = v[ 2*nod ] + v[ 2*nod +1 ];
    }
}


int main()
{
    ifstream in("schi.in");
    ofstream out("schi.out");

    in>>n;

    for ( i = 1; i <= n ; i++)
    {
        in>>b[i];
        actualizare( 1 , 1 , n, i , 1);
    }

    for(  i = n; i >= 1; i--)
    {
        interogare(1 , 1 , n , b[i]);
    }
    for( i = 1 ; i <= n ; i++)
        out<<L[i]<<'\n';
    return 0;
}