Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <bits/stdc++.h>using namespace std;const int N = 100001;int mx[N * 2];int loc(int l, int r) {return (l + r) | (l != r);}void update(int p, int x, int l, int r) {int rt = loc(l, r);if(l == r) {mx[rt] = max(mx[rt], x);return;}int m = (l + r) >> 1;if(p <= m) update(p, x, l, m);else update(p, x, m + 1, r);mx[rt] = max(mx[loc(l, m)], mx[loc(m + 1, r)]);}int query(int L, int R, int l, int r) {int rt = loc(l, r);if(L <= l && r <= R) {return mx[rt];}int m = (l + r) >> 1;int ret = 0;