HDU
来源:互联网 发布:天盾苹果手机数据恢复软件 编辑:程序博客网 时间:2024/05/29 19:35
#include<bits/stdc++.h>using namespace std;int s[800005];int a[200005];void build(int id,int ll,int rr){ if(ll==rr){ s[id]=a[ll]; return; } int mid = (ll+rr)/2; build(id*2,ll,mid); build(id*2+1,mid+1,rr); s[id]=max(s[id*2],s[id*2+1]);}int Querymax(int id,int ll,int rr,int l,int r){ if(l<=ll&&rr<=r) return s[id]; int mid = (ll+rr)/2; if(r<=mid) return Querymax(id*2,ll,mid,l,r); else if(l>mid) return Querymax(id*2+1,mid+1,rr,l,r); else return max(Querymax(id*2,ll,mid,l,r),Querymax(id*2+1,mid+1,rr,l,r));}void updata(int id,int ll,int rr,int l,int add){ if(l == ll && l == rr){ s[id] = add; return; } int mid = (ll+rr)/2; if(l<=mid) updata(id*2,ll,mid,l,add); else updata(id*2+1,mid+1,rr,l,add); s[id] = max(s[id*2],s[id*2+1]);}int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ for(int i=1;i<=n;i++) scanf("%d",&a[i]); build(1,1,n); while(m--){ char q[5]; scanf("%s",q); int x,y; scanf("%d%d",&x,&y); if(q[0]=='Q') printf("%d\n",Querymax(1,1,n,x,y)); if(q[0]=='U') updata(1,1,n,x,y); } } return 0;}
阅读全文
0 0