Cod sursa(job #2174611)

Utilizator Victor24Vasiesiu Victor Victor24 Data 16 martie 2018 12:45:10
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

int arb[400005], tip, q, a, b, ans, n;

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

void update ( int nod, int st, int dr, int poz, int val )
{
    int mij = (st+dr)/2;

    if ( st == dr )
    {
        arb[nod] = val;
        return;
    }

    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 ( dr < L || st > R )
    {
        return;
    }

    if ( st >= L && dr <= R )
    {
        ans = max ( ans, arb[nod] );
        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>>q;

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

    for ( int i = 1; i <= q ; i++ )
    {
        f>>tip>>a>>b;

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

    }

    return 0;
}