Pagini recente » Cod sursa (job #3153246) | Cod sursa (job #3026) | Cod sursa (job #2958870) | Cod sursa (job #60271) | Cod sursa (job #2952446)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 100005;
int ls(int x) {
return 2 * x;
}
int rs(int x) {
return 2 * x + 1;
}
int aint[Nmax * 4];
int v[Nmax];
int l, r, pos;
void build(int p, int q, int node) {
if (p == q) {
aint[node] = v[p];
}
else {
int mid = (p + q) >> 1;
build(p, mid, ls(node));
build(mid + 1, q, rs(node));
aint[node] = max(aint[ls(node)], aint[rs(node)]);
}
}
void update(int p, int q, int node) {
if (p == q and p == pos) {
aint[node] = v[pos];
}
else {
int mid = (p + q) >> 1;
if (pos <= mid)
update(p, mid, ls(node));
else
update(mid + 1, q, rs(node));
aint[node] = max(aint[ls(node)], aint[rs(node)]);
}
}
int query(int p, int q, int node) {
if (l <= p and q <= r)
return aint[node];
int mid = (p + q) >> 1;
int ans1 = INT_MIN, ans2 = INT_MIN;
if (l <= mid)
ans1 = query(p, mid, ls(node));
if (mid + 1 <= r)
ans2 = query(mid + 1, q, rs(node));
return max(ans1, ans2);
}
int main() {
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i)
cin >> v[i];
build(1, n, 1);
while (m--) {
int op, x, y;
cin >> op >> x >> y;
if (op == 0) {
l = x;
r = y;
cout << query(1, n, 1) << '\n';
}
else {
pos = x;
v[x] = y;
update(1, n, 1);
}
}
return 0;
}