Pagini recente » Cod sursa (job #274744) | Cod sursa (job #961818) | Cod sursa (job #1601979) | Monitorul de evaluare | Cod sursa (job #1122308)
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int nmax= 100000;
int v[nmax+1];
int query( int x, int l, int r, int a, int b ) {
if ( a<=l && b>=r ) {
return v[x];
} else if ( a<=r && b>=l ) {
int sol1= query(2*x, l, (l+r)/2, a, b), sol2= query(2*x+1, (l+r)/2+1, r, a, b);
return max(sol1, sol2);
}
return 0;
}
void update( int step, int y, int z ) {
v[step+y-1]= z;
for ( int i= (step+y-1)/2; i>=1; i/= 2 ) {
v[i]= max(v[2*i], v[2*i+1]);
}
}
int main( ) {
int n, m, step;
fin>>n>>m;
for ( step= 1; step<n; step*= 2 ) ;
for ( int i= 1; i<=n; ++i ) {
fin>>v[step+i-1];
}
for ( int i= step-1; i>=1; --i ) {
v[i]= max(v[2*i], v[2*i+1]);
}
for ( int i= 1; i<=m; ++i ) {
int x, y, z;
fin>>x>>y>>z;
if ( x==0 ) {
fout<<query( 1, 1, step, y, z )<<"\n";
} else {
update(step, y, z);
}
}
return 0;
}