标签:
5 6 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 2 9 Q 1 5
5 6 5 9HintHuge input,the C function scanf() will work better than cin
#include<iostream> #include<cstdio> #include<stdio.h> #include<algorithm> using namespace std; const int MAX=200010; int nu[MAX]; struct data{ int l,r,maxf; }node[4*MAX]; void Build(int left,int right,int u){ node[u].l=left;node[u].r=right; if(left==right){ node[u].maxf=nu[left]; return; } int mid=(left+right)/2; Build(left,mid,2*u); Build(mid+1,right,2*u+1); node[u].maxf=max(node[2*u].maxf,node[2*u+1].maxf); } //询问 int query(int left,int right,int u){ if((node[u].l>=left)&&(node[u].r<=right)) return node[u].maxf; int mid=(node[u].l+node[u].r)/2; int ans=0; if(left<=mid) ans=max(ans,query(left,right,2*u)); if(right>mid) ans=max(ans,query(left,right,2*u+1)); return ans; } //更新 int updata(int loc,int w,int u){ if(node[u].l==node[u].r){ node[u].maxf=w; return 0; } if(loc<=node[2*u].r){ updata(loc,w,u*2); } else updata(loc,w,u*2+1); node[u].maxf=max(node[2*u].maxf,node[2*u+1].maxf); return 0; } int main(){ int n,m,i,a,b; char ch; while(~scanf("%d%d",&n,&m)){ for(i=1;i<=n;++i) scanf("%d",&nu[i]); Build(1,n,1); while(m--){ cin>>ch>>a>>b; if(ch=='Q'){ a=query(a,b,1); printf("%d\n",a); } else updata(a,b,1); } } return 0; }
标签:
原文地址:http://blog.csdn.net/qq_18062811/article/details/44854549