Pagini recente » Cod sursa (job #1739429) | Cod sursa (job #208453) | Cod sursa (job #2595934) | Cod sursa (job #2370681) | Cod sursa (job #2977685)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int nmax = 1e5 + 3;
int a[3 * nmax];
int n, m, x, y, p, tip;
int query(int nod, int x, int y, int st, int dr) {
int mij = ( st + dr ) / 2;
if ( x == st && y == dr )
return a[nod];
else if ( y <= mij )
return query(nod * 2, x, y, st, mij);
else if ( x >= mij + 1 )
return query(nod * 2 + 1, x, y, mij + 1, dr);
else
return max( query(nod * 2, x, mij, st, mij), query(nod * 2 + 1, mij + 1, y, mij + 1, dr) );
}
inline void update( int poz, int val ) {
int mx, t;
poz = p + poz - 1;
a[poz] = val;
while ( poz > 0 ) {
t = poz / 2;
mx = max(a[2 * t], a[2 * t + 1]);
poz = t;
a[t] = mx;
}
}
int main()
{
f >> n >> m;
p = 1;
while ( (p<<=1) <= n );
for ( int i = 1; i <= n; i++ )
f >> a[p + i - 1];
for ( int i = p - 1; i >= 1; i-- )
a[i] = max(a[2 * i], a[2 * i + 1]);
for ( int i = 1; i <= m; i++ ) {
f >> tip >> x >> y;
if ( tip == 0 )
g << query(1, x, y, 1, p) << '\n';
else
update(x, y);
}
f.close();
g.close();
return 0;
}