Cod sursa(job #2139183)

Utilizator Victor24Vasiesiu Victor Victor24 Data 22 februarie 2018 10:55:28
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
using namespace std;

ifstream f ( "arbint.in" );
ofstream g ( "arbint.out" );

int n, m, arb [ 4 * 100005 ], ans, x, a, b, i;

void update ( int nod, int st, int dr, int poz, int val )
{
    if ( st == dr )
    {
        arb[nod] = val;
        return;
    }

    int mij = ( st + dr ) / 2;

    if ( poz <= mij )
    {
        update ( 2*nod, st, mij , poz, val  );
    }
    else
    {
        update ( 2*nod+1 , mij + 1, dr , poz, val );
    }

    arb[nod] = max ( arb[2*nod], arb[2*nod+1] );

}

void queri ( int nod, int st, int dr, int L, int R )
{
    if ( st >= L && dr <= R )
    {
        ans  = max ( ans, arb[nod] );
        return;
    }
    if ( st < L || dr > R )
    {
        return;
    }

    int mij = ( st + dr ) / 2;

    queri ( 2*nod , st , mij , L , R );
    queri ( 2*nod+1 , mij + 1 , dr , L , R );

}

int main ()
{
    f>>n>>m;

    for (i=1; i<=n; i++)
    {
        f>>x;
        update ( 1 , 1, n, i, x);
    }

    for ( i = 1 ; i <= m ; i++ )
    {
        f>>x>>a>>b;

        if ( x == 1 )
        {
            update ( 1 , 1 , n , a , b );
        }
        else
        {
            ans=-1;
            queri ( 1 , 1 , n , a , b );
            g<<ans<<'\n';
        }

    }

    return 0;
}