Đăng nhập để hỏi chi tiết


Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
\begin{array}{c} \color{#FFFFFFff}{H}\color{#E7E7E7ff}{o}\color{#CFCFCFff}{r}\color{#B7B7B7ff}{i}\color{#9F9F9Fff}{z}\color{#878787ff}{o}\color{#6F6F6Fff}{n} \end{array} $\\$
// Horizon
#include <bits/stdc++.h>
using namespace std;
const int m = 1e9 + 10;
vector<int> a, v;
int n, q;
void B(int i, int l, int r) {
if (l == r) v[i] = a[l];
else {
int mid = (l + r) / 2;
B(2 * i, l, mid);
B(2 * i + 1, mid + 1, r);
v[i] = max(v[2 * i], v[2 * i + 1]);
}
}
void G(int i, int l, int r, int p, int k) {
if (l == r) v[i] = k;
else {
int mid = (l + r) / 2;
if (p <= mid)
G(2 * i, l, mid, p, k);
else
G(2 * i + 1, mid + 1, r, p, k);
v[i] = max(v[2 * i], v[2 * i + 1]);
}
}
int Q(int i, int l, int r, int ql, int qr) {
if (ql > r || qr < l)
return -m;
if (ql <= l && r <= qr)
return v[i];
int mid = (l + r) / 2,
l1 = Q(2 * i, l, mid, ql, qr),
r1 = Q(2 * i + 1, mid + 1, r, ql, qr);
return max(l1, r1);
}
int main() {
cin >> n;
a.resize(n);
v.resize(4 * n);
for (int& i : a) cin >> i;
B(1, 0, n - 1);
cin >> q;
for (int i = 0; i < q; i++) {
int t; cin >> t;
if (t == 1) {
int x, y;
cin >> x >> y;
x--;
G(1, 0, n - 1, x, y);
} else if (t == 2) {
int l, r;
cin >> l >> r;
l--; r--;
cout << Q(1, 0, n - 1, l, r) << '\n';
}
}
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Bảng tin