Pagini recente » Cod sursa (job #1327533) | Cod sursa (job #553785) | Cod sursa (job #1227648) | Cod sursa (job #277147) | Cod sursa (job #434629)
Cod sursa(job #434629)
/*
* File: main.cpp
* Author: SpeeDemon
*
* Created on April 6, 2010, 11:39 AM
*/
#include <cstdlib>
#include <fstream>
#define Nmax 400
/*
*
*/
using namespace std;
int Aint[Nmax];
int P, x, a, b;
inline int max( int x, int y )
{
if( x > y )
return x;
return y;
}
inline void UpDate( int vertex, int left, int right )
{
if( left == right )
{
Aint[vertex]=x;
return;
}
int middle=left+(right-left)/2;
if( P <= middle )
UpDate( 2*vertex, left, middle );
else UpDate( 2*vertex+1, middle+1, right );
Aint[vertex]=max( Aint[2*vertex], Aint[2*vertex+1] );
}
inline int Query( int vertex, int left, int right )
{
if( a <= left && b <= right )
return Aint[vertex];
int m=-1, middle=left+(right-left)/2;
if( a <= middle )
m=Query( 2*vertex, left, middle );
if( b > 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( P=1; P <= N; ++P )
{
in>>x;
UpDate( 1, 1, N );
}
ofstream out( "arbint.out" );
for( ; M; --M )
{
in>>i;
if( !i )
{
in>>a>>b;
out<<Query( 1, 1, N )<<'\n';
}
else {
in>>P>>x;
UpDate( 1, 1, N );
}
}
out.close();
in.close();
return EXIT_SUCCESS;
}