Cod sursa(job #1648337)

Utilizator DysKodeTurturica Razvan DysKode Data 11 martie 2016 09:34:49
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int arb[ 4 * 100010 ],i,j,n,m,a,b,st,fn,x;

void UpDat3(int nod, int left, int right, int poz, int val)
{
    int middle = ( left + right ) / 2;
    if( left == right )
    {
        arb[ nod ] = val;
        return;
    }
    if( poz <= middle )
        UpDat3( 2 * nod , left , middle , poz , val );
    else
        UpDat3( 2 * nod + 1 , middle + 1 , right , poz , val );

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

int Qu3ry(int nod, int left, int right, int st, int fn)
{
    if( left > fn || right < st )
        return -1;
    else if( left >= st && right <= fn )
        return arb[ nod ];
    int middle = ( left + right ) / 2;
    return max( Qu3ry( 2 * nod , left , middle , st , fn ) , Qu3ry( 2 * nod + 1 , middle + 1 , right , st , fn ) );
}

int main()
{
    fin>>n>>m;
    for( i = 1 ; i <= n ; i++ )
    {
        fin>>x;
        UpDat3( 1 , 1 , n , i , x );
    }

    for( i = 1 ; i <= m ; i++ )
    {
        fin>>x;
        if( x == 1 )
        {
            fin>>a>>b;
            UpDat3( 1 , 1 , n , a , b );
        }
        else
        {
            fin>>a>>b;
            fout<<Qu3ry(1 , 1 , n , a , b)<<'\n';
        }
    }

return 0;
}