Pagini recente » Cod sursa (job #1003696) | Cod sursa (job #1003698) | Cod sursa (job #1375285) | Cod sursa (job #1005093) | Cod sursa (job #1393804)
#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;
}