Pagini recente » Cod sursa (job #2516976) | Cod sursa (job #240872) | Cod sursa (job #1388609) | Cod sursa (job #1472655) | Cod sursa (job #2765122)
#include <iostream>
using namespace std;
int const INF = 1e9 + 7;
int const NMAX = 1e5;
int tree[2 + 2 * NMAX];
void resetTree() {
for(int i = 1;i <= 2 * NMAX;i++){
tree[i] = INF;
}
}
void updateTree(int index, int value) {
tree[index] = value;
while(index != 1){
index /= 2;
tree[index] = max(tree[index * 2], tree[index * 2 + 1]);
}
}
int queryMaximum(int from, int to) {
int ans = max(tree[from], tree[to]);
while(from <= to){
if(from % 2 == 1){
ans = max(tree[from], ans);
from++;
}
from /= 2;
if(to % 2 == 0){
ans = max(tree[to], ans);
to--;
}
to /= 2;
}
return ans;
}
int main() {
int n, q, c, cer, index, value, from, to;
cin >> n >> q;
resetTree();
for(int i = 1;i <= n;i++){
cin >> c;
updateTree(i - 1 + n, c);
}
for(int i = 1;i <= q;i++){
cin >> cer;
if(cer == 1){
cin >> index >> value;
updateTree(index - 1 + n, value);
}else{
cin >> from >> to;
cout << queryMaximum(from - 1 + n, to - 1 + n) << '\n';
}
}
return 0;
}