Pagini recente » Cod sursa (job #812308) | Cod sursa (job #1883680) | Cod sursa (job #3182252) | Cod sursa (job #1378519) | Cod sursa (job #1343415)
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 128 * 1024 , INF= ( 1 << 30 );
ifstream in( "arbor.in" );
ofstream out( "arbor.out" );
int st[ NMAX+1 ], ans;
void querry( int nodl, int nodr, int x, int y, int poz )
{
if ( nodl <= x && y <= nodr )
{
ans = max( ans, st[ poz ] );
return ;
}
int mid= ( x + y ) / 2;
if ( mid >= nodl )
{
querry( nodl, nodr, x, mid, 2 * poz );
}
if ( mid + 1 <= nodr )
{
querry( nodl, nodr, mid + 1, y, 2 * poz + 1 );
}
}
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; 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
{
ans= -INF;
querry( y, z, 1, N, 1 );
out << ans << '\n';
}
}
return 0;
}