Pagini recente » Cod sursa (job #117248) | Cod sursa (job #1560473) | Cod sursa (job #262532) | Cod sursa (job #3254668) | Cod sursa (job #2536625)
#include <fstream>
using namespace std;
ifstream in ("arbint.in");
ofstream out ("arbint.out");
void update ( int nod, int left, int right, int poz, int val);
void f_find ( int nod, int left, int right );
int aint[400137];
int n, m;
int a, b;
int mx;
int main()
{
in >> n >> m;
for ( register int i = 1 ; i <= n ; ++i )
{
in >> a;
update ( 1, 1, n, i, a );
}
for ( register int j = 1 ; j <= m ; ++j )
{
in >> a;
if ( a == 0 )
{
in >> a >> b;
mx = 0;
f_find ( 1, 1, n );
out << mx << '\n';
}
else
{
in >> a >> b;
update ( 1, 1, n, a, b );
}
}
return 0;
}
void update ( int nod, int left, int right, int poz, int val)
{
int mid = ( left + right ) / 2;
if ( left == right )
{
aint[nod] = val;
return ;
}
if ( poz <= mid )
update ( nod * 2, left, mid, poz, val );
else
update ( nod * 2 + 1, mid + 1, right, poz, val );
aint[nod] = max ( aint[nod * 2], aint[nod * 2 + 1] );
}
void f_find ( int nod, int left, int right )
{
int mid = ( left + right ) / 2;
if ( a <= left && right <= b )
{
if ( mx < aint[nod] )
mx = aint[nod];
return ;
}
if ( a <= mid )
f_find ( nod * 2, left, mid );
if ( mid < b )
f_find ( nod * 2 + 1, mid + 1, right );
}