Pagini recente » Cod sursa (job #1267680) | Cod sursa (job #1484612) | Cod sursa (job #2028813) | Cod sursa (job #489785) | Cod sursa (job #544360)
Cod sursa(job #544360)
#include <fstream>
#include <cstdlib>
#define N_MAX 400011
using namespace std;
int v[N_MAX];
int xIndex, xValue, Left, Right;
inline int _max( int x, int y ) { return ( x >= y ? x : y ); }
inline void Update( int vertex, int left, int right )
{
if( left == right )
{
v[vertex]=xValue;
return;
}
int middle=(left+right)/2;
if( xIndex <= middle )
Update( 2*vertex, left, middle );
else Update( 2*vertex+1, middle+1, right );
v[vertex]=_max( v[2*vertex], v[2*vertex+1] );
}
inline int Query( int vertex, int left, int right )
{
if( left >= Left && right <= Right )
return v[vertex];
int middle=(left+right)/2, m=-1;
if( Left <= middle )
m=Query( 2*vertex, left, middle );
if( Right > middle )
m=_max( m, Query( 2*vertex+1, middle+1, right ) );
return m;
}
int main( void )
{
int N, M, i;
ifstream in( "arbint.in" );
in>>N>>M;
for( i=1; i <= N; ++i )
{
in>>xValue;
xIndex=i;
Update( 1, 1, N );
}
ofstream out( "arbint.out" );
for( ; M; --M )
{
in>>i;
if( 1 == i )
{
in>>xIndex>>xValue;
Update( 1, 1, N );
}
else {
in>>Left>>Right;
out<<Query( 1, 1, N )<<'\n';
}
}
return EXIT_SUCCESS;
}