1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 5; int tr[maxn<<2]; #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 void push_up(int rt) { // 用更新过的两个子节点信息来更新当前节点信息 tr[rt] = max(tr[rt<<1], tr[rt<<1|1]); } void build(int l, int r, int rt) { if (l == r) { // tr[rt] = a[l]; scanf("%d", tr + rt); return; } int mid = (l + r) / 2; build(lson); build(rson); push_up(rt); } // 将 a[p] 修改为 x void update(int p, int x, int l, int r, int rt) { if (l == r) { tr[rt] = x; return; } int mid = (l + r) / 2; (p <= mid) ? update(p, x, lson) : update(p, x, rson); push_up(rt); } // 查询 a[L..R] 的最大值 int query(int L, int R, int l, int r, int rt) { if (L <= l && r <= R) // 区间完全被覆盖 return tr[rt]; int res = 0, mid = (l + r) / 2; if (L <= mid) res = max(res, query(L, R, lson)); if (R > mid) res = max(res, query(L, R, rson)); return res; } int n, q, op, x, y; int main() { scanf("%d", &n); build(1, n, 1); scanf("%d", &q); while (q--) { scanf("%d%d%d", &op, &x, &y); if (op == 1) update(x, y, 1, n, 1); else printf("%d\n", query(x, y, 1, n, 1)); } return 0; }
- 1
信息
- ID
- 25
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者