Pagini recente » Cod sursa (job #204152) | Cod sursa (job #76338) | Cod sursa (job #1973281) | Cod sursa (job #680574) | Cod sursa (job #2596203)
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 131072;
int n;
int q;
int tree[2 * N + 7];
void update(int i, int x) {
i = (i + n - 1);
tree[i] = x;
i /= 2;
while (i) {
tree[i] = max(tree[2 * i], tree[2 * i + 1]);
i /= 2;
}
}
int query(int l, int r) {
int ans = 0;
l = n + l - 1;
r = n + r - 1;
while (l <= r) {
if (l % 2 == 1) {
ans = max(ans, tree[l]);
l++;
}
if (r % 2 == 0) {
ans = max(ans, tree[r]);
r--;
}
l /= 2;
r /= 2;
}
return ans;
}
int main() {
freopen ("arbint.in", "r", stdin);
freopen ("arbint.out", "w", stdout);
scanf("%d %d", &n, &q);
int init = n;
int lg = log2(n);
if ((1 << lg) != n) {
n = (1 << (lg + 1));
}
for (int i = 1; i <= init; i++) {
int x;
scanf("%d", &x);
update(i, x);
}
for (int i = 1; i <= q; i++) {
int t, a, b;
scanf("%d %d %d", &t, &a, &b);
if (t == 0) {
printf("%d\n", query(a, b));
} else {
update(a, b);
}
}
}