Pagini recente » Cod sursa (job #986575) | Cod sursa (job #2316750) | Cod sursa (job #2935356) | Cod sursa (job #62967) | Cod sursa (job #1600072)
#include <bits/stdc++.h>
using namespace std;
int A[2 * 100000 + 10];
int query(int a, int b, int n) {
a += n;
b += n;
int res = 0;
while (a < b) {
if (a % 2) {
res = max(res, A[a]);
++a;
}
if (b % 2) {
--b;
res = max(res, A[b]);
}
a /= 2;
b /= 2;
}
return res;
}
void update(int a, int val, int n) {
a += n;
A[a] = val;
while (a > 1) {
a /= 2;
A[a] = max(A[2 * a], A[2 * a + 1]);
}
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; ++i)
scanf("%d", &A[i + n]);
for (int i = n - 1; i >= 1; --i)
A[i] = max(A[2 * i], A[2 * i + 1]);
while (m--) {
int op;
int xx, yy;
scanf("%d%d%d", &op, &xx, &yy);
if (op == 0)
printf("%d\n", query(xx - 1, yy, n));
else
update(xx - 1, yy, n);
}
return 0;
}