P1531 I Hate It 線段樹解法
阿新 • • 發佈:2022-03-07
P1531 I Hate It
區間最大值,區間查詢最大值,單點更新
//P1531 I Hate It #include<cstdio> #include<algorithm> #include<iostream> 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]<sc) { Max[rt]=sc; } return ; } int m=(l+r)>>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<<query(x,y,1,n,1)<<endl; } else { update(x,y,1,n,1); } } }