Pagini recente » Cod sursa (job #885018) | Cod sursa (job #2033065) | Cod sursa (job #1286708) | Cod sursa (job #2296162) | Cod sursa (job #1969905)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
const int maxn = 1e5 + 5;
int T[maxn << 1];
int n, q;
void Build() {
for (int i = n - 1; i >= 0; i--) {
T[i] = max(T[i << 1], T[i << 1 | 1]);
}
}
void Update(int pos, int val) {
pos += n - 1;
T[pos] = val;
while (pos > 1) {
int i = pos >> 1;
T[i] = max(T[pos], T[pos ^ 1]);
pos = i;
}
}
int Query(int l, int r) {
int ans = 0;
l += n - 1;
r += n;
while (l < r) {
if (l & 1) ans = max(ans, T[l++]);
if (r & 1) ans = max(ans, T[--r]);
l >>= 1;
r >>= 1;
}
return ans;
}
int main() {
ios_base :: sync_with_stdio(false);
fin >> n >> q;
for (int i = 1; i <= n; i++) {
fin >> T[i + n - 1];
}
Build();
while (q--) {
int op, x, y;
fin >> op >> x >> y;
if (op == 1) Update(x, y);
if (op == 0) fout << Query(x, y) << "\n";
}
return 0;
}