# [HDU-1754] ```cpp= #include<iostream> #include<algorithm> using namespace std; #define N int(2e5 + 5) static int mx[N << 2]; int n, m; char c; void pull(int x){ mx[x] = max(mx[x<<1] , mx[x<<1|1]); } void build(int x, int l, int r){ if (l == r){ cin >> mx[x]; return; } int mid = (l + r) / 2; build(x << 1, l, mid); build(x <<1 | 1, mid+1, r); pull(x); } int query(int x, int l, int r, int ql, int qr){ if (ql <= l && qr >= r){ return mx[x]; } int ret = 0; int mid = (l + r) / 2; if (ql <= mid){ ret = max(ret, query(x<<1, l, mid, ql, qr)); } if (qr > mid){ ret = max(ret, query(x<<1|1, mid+1, r, ql, qr)); } return ret; } void update(int x, int l, int r, int pos, int val){ if (l == r) { mx[x] = val; return; } int mid = (l + r) / 2; if (pos <= mid) update(x<<1, l, mid, pos, val); else update(x<<1|1, mid+1, r, pos, val); pull(x); } int main(){ ios::sync_with_stdio(0); cin.tie(0); while(cin >> n >> m){ build(1, 1, n); while(m --){ cin >> c; if (c == 'Q'){ int a, b; cin >> a >> b; cout << query(1, 1, n, a, b)<<endl; }else if (c == 'U'){ int a, b; cin >> a >> b; update(1, 1, n, a, b); } } } } ```