Pagini recente » Cod sursa (job #1398404) | Cod sursa (job #867776) | Cod sursa (job #871135) | Cod sursa (job #2272377) | Cod sursa (job #1184878)
#include <fstream>
using namespace std;
#define MaxN 100050
int arb[MaxN*2];
int pos, val;
int pos1, pos2;
int max2( int a, int b )
{
if ( a > b )
return a;
return b;
}
void Update( int nod, int st, int dr )
{
if ( st == dr )
arb[nod] = val;
else
{
int div = ( st + dr ) >> 1;
if ( pos <= div )
Update( nod << 1, st, div );
else
Update( ( nod << 1 ) + 1, div + 1, dr );
arb[nod] = max2( arb[ nod << 1 ], arb[ ( nod << 1 ) + 1 ] );
}
}
void Query( int nod, int st, int dr )
{
if ( ( st >= pos1 ) && ( dr <= pos2 ) )
{
if ( arb[nod] > val )
val = arb[nod];
}
else
{
int mid = ( st + dr ) >> 1;
if ( mid >= pos1 )
Query( nod << 1, st, mid );
if ( mid < pos2 )
Query( ( nod << 1 ) + 1, mid + 1, dr );
}
}
int main()
{
ifstream f1( "arbint.in" );
ofstream f2( "arbint.out" );
int n, m, i;
f1 >> n >> m;
for ( i = 1; i <= n; ++i )
{
pos = i;
f1 >> val;
Update( 1, 1, n );
}
short a;
for ( i = 1; i <= m; ++i )
{
f1 >> a;
if ( a )
{
f1 >> pos >> val;
Update( 1, 1, n );
}
else
{
f1 >> pos1 >> pos2;
val = 0;
Query( 1, 1, n );
f2 << val << '\n';
}
}
f1.close();
f2.close();
return 0;
}