Pagini recente » Cod sursa (job #2014891) | Cod sursa (job #183774) | Politic2 | Cod sursa (job #499056) | Cod sursa (job #1058446)
#include <fstream>
std::ifstream fin ("arbint.in");
std::ofstream fout ("arbint.out");
int A[400500], a, b;
inline void update(int nod, int st, int dr){
if(st == dr){
A[nod] = b;
return;
}
int m = (st + dr) / 2;
if(a <= m) {
update(2*nod, st, m);
}
else{
update(2*nod+1, m+1, dr);
}
A[nod] = std::max(A[2 * nod], A[2 * nod + 1]);
}
inline int query(int nod, int st, int dr){
if(a <= st && b >= dr)
return A[nod];
int m = (st + dr) / 2;
int max1 = -1, max2 = -1;
if(a <= m) max1 = query(2*nod, st, m);
if(b > m) max2 = query(2*nod + 1, m+1, dr);
return std::max(max1, max2);
}
int main(){
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; i++){
fin >> b; a = i; update(1, 1, n);
}
int op;
while(m != 0){
fin >> op >> a >> b;
if(op == 1) update(1, 1, n);
else fout << query(1, 1, n) << "\n";
m --;
}
return 0;
}