Pagini recente » Cod sursa (job #1391624) | Cod sursa (job #1082330) | Cod sursa (job #2563202) | Cod sursa (job #1921315) | Cod sursa (job #808659)
Cod sursa(job #808659)
#include <cstdio>
#include <algorithm>
using namespace std;
inline int next_int() {
int d;
scanf("%d", &d);
return d;
}
const int H = 17;
int Tree[2 << 17];
int q(int root, int left, int right, int a, int b) {
if (left == a && b == right)
return Tree[root];
int mid = (left + right) >> 1;
if (b <= mid)
return q(root << 1, left, mid, a, b);
if (mid <= a)
return q(root << 1 | 1, mid, right, a, b);
return max(q(root << 1, left, mid, a, mid), q(root << 1 | 1, mid, right, mid, b));
}
int query(int a, int b) {
return q(1, 1 << H, 2 << H, (1 << H) + a, (1 << H) + b);
}
void set(int index, int value) {
index += 1 << H;
Tree[index] = value;
while (index >= 2) {
index >>= 1;
Tree[index] = max(Tree[index << 1], Tree[index << 1 | 1]);
}
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n = next_int();
int m = next_int();
for (int i = 0; i < n; i++) {
set(i, next_int());
}
for (int i = 0; i < m; i++) {
int a = next_int();
int b = next_int();
int c = next_int();
if (a == 0) {
printf("%d\n", query(b - 1, c));
}
if (a == 1) {
set(b - 1, c);
}
}
return 0;
}