Pagini recente » Cod sursa (job #2154728) | Cod sursa (job #102631) | Cod sursa (job #1105966) | Cod sursa (job #1634090) | Cod sursa (job #3312546)
#include <bits/stdc++.h>
using namespace std;
struct SegTree {
int n;
vector<int> arr;
SegTree(const vector<int>& rra) : n(rra.size()), arr(2 * n) {
for (int i = 0; i < n; i++) arr[n + i] = rra[i];
for (int i = n - 1; i > 0; i--) arr[i] = max(arr[i << 1], arr[i << 1 | 1]);
}
void put(int i, int x) {
i += n;
arr[i] = x;
for (i >>= 1; i > 0; i >>= 1) arr[i] = max(arr[i << 1], arr[i << 1 | 1]);
}
int get(int l, int r) {
int x = INT_MIN;
for (l += n, r += n; l <= r; l >>= 1, r >>= 1) {
if (l & 1) x = max(x, arr[l++]);
if (!(r & 1)) x = max(x, arr[r--]);
}
return x;
}
};
int main() {
#ifndef LOCAL
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
vector<int> arr(N);
for (int i = 0; i < N; i++) cin >> arr[i];
SegTree T(arr);
while (M--) {
int o, a, b;
cin >> o >> a >> b;
if (o) {
// update: set position a to value b
T.put(a - 1, b);
} else {
// query: max on [a, b]
cout << T.get(a - 1, b - 1) << "\n";
}
}
}