Pagini recente » Cod sursa (job #1631562) | Cod sursa (job #405211) | Cod sursa (job #2972423) | Cod sursa (job #3236301) | Cod sursa (job #1096062)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin( "arbint.in" );
ofstream cout( "arbint.out" );
int n, m, a, b, op, maxim, sta, end;
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 ( sta <= st && dr <= end )
{
if ( maxim < v[ nod ] ) maxim = v[ nod ];
return;
}
mij = ( st + dr ) / 2;
if ( sta <= mij ) query( 2 * nod ,st,mij );
if ( mij < end ) 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;
sta = a;
end = b;
query( 1,1,n );
cout << maxim << '\n';
}
else
{
pos = a;
val = b;
update( 1,1,n );
}
}
}