Cod sursa(job #1393804)

Utilizator Burbon13Burbon13 Burbon13 Data 19 martie 2015 19:27:47
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <cstdio>
using namespace std;

#define mx 100005

int n,m;
int arb[4*mx] ;
int maxim ;
int a , b ;

void update( int nod , int st , int dr  )
{
    if ( st == dr )
    {
        arb[nod] = b ;
        return ;
    }
    int mij = ( st + dr ) / 2 ;
    if ( a <= mij )
        update( 2 * nod , st , mij  ) ;
    else
        update( 2 * nod + 1 , mij + 1 , dr ) ;
    arb[nod] = max( arb[2*nod] , arb[2*nod+1] ) ;
}

void query( int nod , int st , int dr  )
{
    if ( a <= st && b >= dr )
    {
        if ( arb[nod] > maxim )
            maxim = arb[nod] ;
        return ;
    }
    int mij = ( st + dr ) / 2 ;
    if ( a <= mij )
        query( 2 * nod , st , mij  ) ;
    if ( b > mij )
        query( 2 * nod + 1 , mij + 1 ,  dr ) ;
}

int main()
{
    freopen( "arbint.in" , "r" , stdin ) ;
    freopen( "arbint.out" , "w" , stdout ) ;
    scanf( "%d %d" , &n , &m ) ;
    for ( int i = 1 ; i <= n ; i ++ )
    {
        scanf( "%d" , &b ) ;
        a = i ;
        update(1,1,n) ;
    }
    for ( int i = 1 ; i <= m ; i ++ )
    {
        int c ;
        scanf( "%d %d %d" , &c , &a , &b ) ;
        if ( c == 0 )
        {
            maxim = 0 ;
            query( 1 , 1 , n ) ;
            printf( "%d\n" , maxim ) ;
        }
        else
            update( 1 , 1 , n ) ;
    }
    return 0;
}