Pagini recente » Cod sursa (job #2223438) | Cod sursa (job #834573) | Cod sursa (job #2758124) | Cod sursa (job #1768269) | Cod sursa (job #1343450)
#include <fstream>
using namespace std;
const int NMAX = 128 * 1024 , INF= ( 1 << 30 );
ifstream in( "arbint.in" );
ofstream out( "arbint.out" );
int st[ NMAX+1 ];
int query( int nod, int nodl, int nodr, int x, int y )
{
if( y < nodl || x> nodr ) return -INF;
if( x<=nodl && y>=nodr ) return st[nod];
int mid= ( nodl + nodr ) / 2;
int a= query( nod * 2, nodl, mid, x, y );
int b= query( nod * 2 + 1, mid+1, nodr, x, y );
return max( a, b );
}
int main( )
{
int N, T, N2;
in >> N >> T;
for( N2= 1; N2 < N; N2 *=2 ) {}
for( int i= 1; i<=N; ++i )
{
in >> st[ N2-1+i ];
}
for( int i= N+1; i<=N2; ++i )
{
st[ N2-1+i ]= -INF;
}
for( int i= N2-1; i>=1; --i )
{
st[ i ]= max( st[ i*2 ] , st[ i*2+1 ] );
}
int x, y, z;
for( int t= 1; t<=T; ++t )
{
in >> x >> y >> z;
if( x==1 )
{
st[ N2-1+y ]= z;
for( int i= ( N2-1+y )/2; i>=1; i/=2 )
{
st[ i ]= max( st[ i*2 ] , st[ i*2+1 ] );
}
}
else
{
out << query( 1, 1, N2, y, z ) << '\n';
}
}
return 0;
}