#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;
}
HDU - 1754 I Hate It
最新推荐文章于 2019-08-08 19:46:56 发布