P1531 I Hate It 线段树解法
P1531 I Hate It
区间最大值,区间查询最大值,单点更新
//P1531 I Hate It #include#include #include using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn=222222; int Max[maxn<<2]; void PushUp(int rt) { Max[rt]=max(Max[rt<<1],Max[rt<<1|1]); } void build(int l,int r,int rt) { if (l==r) { cin>>Max[rt]; return ; } int m=(l+r)>>1; build(lson); build(rson); PushUp(rt); } void update(int p,int sc,int l,int r,int rt) { if (l==r) { if (Max[rt] >1; if (p<=m) update(p,sc,lson); else update(p,sc,rson); PushUp(rt); } int query(int L,int R,int l,int r,int rt) { if (L<=l&&r<=R) { return Max[rt]; } int m=(l+r)>>1; int ret=0; if (L<=m) ret=max(ret,query(L,R,lson)); if (R>m) ret=max(ret,query(L,R,rson)); return ret; } int main() { int n,m; cin>>n>>m; build(1,n,1); for (int i=1;i<=m;i++) { char c; int x,y; cin>>c>>x>>y; if (c=='Q') { cout<