本文共 1420 字,大约阅读时间需要 4 分钟。
#include#include #define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 200001int Max[maxn<<2];void build(int l,int r,int rt){ int m; if (l==r) { scanf("%d",&Max[rt]); return; } m=((l+r)>>1); build(lson); build(rson); Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);}void update(int p,int updt,int l,int r,int rt){ int m; if(l==r) { Max[rt]=updt; return; } m=((l+r)>>1); if (p<=m) update(p,updt,lson); else update(p,updt,rson); Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);}int query(int L,int R,int l,int r,int rt){ int m,ret=0,maxl,maxr; if (L<=l&&R>=r) return Max[rt]; m=((l+r)>>1); if (R<=m) ret=query(L,R,lson); else if(L>m) ret=query(L,R,rson); else { maxl=query(L,m,lson); maxr=query(m+1,R,rson); ret=max(maxl,maxr); } return ret;}int main(){ int n,a,b,m,i; char op[2]; while (scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while (m--) { scanf("%s%d%d",op,&a,&b); if(op[0]=='Q') printf("%d\n",query(a,b,1,n,1)); else if(op[0]=='U') update(a,b,1,n,1); } } return 0;}
本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/04/28/2475489.html,如需转载请自行联系原作者