Pagini recente » Cod sursa (job #2732547) | Monitorul de evaluare | Cod sursa (job #1700471) | Cod sursa (job #2095549) | Cod sursa (job #1096063)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin( "arbint.in" );
ofstream cout( "arbint.out" );
int n, m, a, b, op, maxim, start, finish;
int v[ 1000001 ], pos, val;
void update( int nod,int st,int dr )
{
int mij;
if ( st == dr )
{
v[ nod ] = val;
return;
}
mij = ( st + dr ) / 2;
if ( pos <= mij ) update( 2 * nod,st,mij );
else update( 2 * nod + 1,mij + 1,dr );
v[ nod ] = max( v[ 2 * nod ],v[ 2 * nod + 1 ] );
}
void query( int nod,int st,int dr )
{
int mij;
if ( start <= st && dr <= finish )
{
if ( maxim < v[ nod ] ) maxim = v[ nod ];
return;
}
mij = ( st + dr ) / 2;
if ( start <= mij ) query( 2 * nod ,st,mij );
if ( mij < finish ) query( 2 * nod + 1,mij + 1,dr );
}
int main()
{
int i;
cin >> n >> m;
for ( i = 1; i <= n; i++ )
{
cin >> a;
pos = i;
val = a;
update( 1,1,n );
}
for ( i = 1; i <= m; i++ )
{
cin >> op >> a >> b;
if ( !op )
{
maxim = -1;
start = a;
finish = b;
query( 1,1,n );
cout << maxim << '\n';
}
else
{
pos = a;
val = b;
update( 1,1,n );
}
}
}