Pagini recente » Cod sursa (job #1076271) | Cod sursa (job #1030130) | Cod sursa (job #1999681) | Cod sursa (job #1979759) | Cod sursa (job #2422085)
#include <iostream>
#include <fstream>
using namespace std;
const int INT = 2147483647;
int arb[262146]; //a 2a cea mai mare putere a lui 2 dupa n. +2, ca sa fie
int val, poz, a, b;
void update (int p, int st, int dr) {
//actualizez elem de pe pozitia poz cu val
if ( st == dr ) {
arb[p] = val;
return;
}
int m = ( st + dr ) / 2;
if ( poz <= m )
update ( 2*p, st, m );
else
update ( 2*p+1, m+1, dr );
arb[p] = max( arb[2*p], arb[2*p+1] );
}
int query (int p, int st, int dr) {
//returneaza max( [st,dr] x [a,b] )
if ( a <= st && dr <= b )
return arb[p];
int m = (st + dr)/2, mst = -INT, mdr = -INT;
if ( a <= m )
mst = query(2*p, st, m);
if ( b > m )
mdr = query(2*p+1, m+1, dr);
return max(mst,mdr);
}
int main () {
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n, m, type;
fin>>n>>m;
for ( int i = 1; i <= n; i++ ) {
fin>>val;
poz = i;
update(1, 1, n);
}
for ( int i = 1; i <= m; i++ ) {
fin>>type;
if ( type == 0 ) {
fin>>a>>b;
fout<<query(1,1,n)<<'\n';
} else {
fin>>a>>b;
poz = a; val = b;
update(1,1,n);
}
}
return 0;
}