Pagini recente » Cod sursa (job #1136546) | pre103 | Cod sursa (job #1203464) | Profil free2infiltrate | Cod sursa (job #3215740)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX = 1e5 + 5;
int aint[4 * NMAX], v[NMAX];
void update( int poz ){
if( poz == 0 )
return ;
aint[poz] = max(aint[poz*2], aint[poz*2 + 1]);
update(poz/2);
}
int query( int poz, int st, int dr, int qst, int qdr ){
if( dr < qst || st > qdr )
return 0;
if( st >= qst && dr <= qdr )
return aint[poz];
int mij = ( st + dr ) / 2;
return max(query(poz * 2, st, mij, qst, qdr ),
query(poz * 2 + 1, mij+1, dr, qst, qdr ));
}
int main()
{
int n, m;
in >> n >> m;
int p1 = 1;
while( p1 <= n )
p1 *= 2;
for( int i = 1; i <= n; i++ ){
in >> v[i];
aint[i + p1 - 1] = v[i];
}
for( int i = p1; i < p1 + n; i++ )
update(i/2);
while( m-- ){
int cer, a, b;
in >> cer >> a >> b;
if( cer == 0 )
out << query( 1, 1, p1, a, b ) << endl;
else{
int poz = p1 + a - 1;
aint[poz] = b;
update(poz / 2);
}
}
return 0;
}