您的位置:首页 > 其它

Hdu1754

2018-03-08 09:50 309 查看
无话可说。。。裸的嘛~#include<cstdio>
#include<string>
#include<cmath>
#define maxn 200004
using namespace std;
int tr[maxn*4];

void build(int now,int l,int r){
if(l == r){scanf("%d",&tr[now]);return;}
int mid=(l+r)>>1;
build(now<<1,l,mid);build(now<<1|1,mid+1,r);
tr[now]=max(tr[now<<1],tr[now<<1|1]);
}

int query(int now,int l,int r,int L,int R){
if(l==r) return tr[now];
int ans=-2e9;
int mid=(l+r)>>1;
if(L<=mid) ans=max(query(now<<1,l,mid,L,R),ans);
if(R>mid) ans=max(query(now<<1|1,mid+1,r,L,R),ans);
return ans;
}

void update(int now,int l,int r,int w,int chg){
if(l==r){tr[now]=chg;return;}
int mid=(l+r)>>1;
if(w<=mid) update(now<<1,l,mid,w,chg);
else update(now<<1|1,mid+1,r,w,chg);
tr[now]=max(tr[now<<1],tr[now<<1|1]);
}

int main(){
int n,m;
while(scanf("%d%d",&n,&m)){
build(1,1,n);
char s[10];
while(m--){
scanf("%s",s);
int a,b;
scanf("%d%d",&a,&b);
if(s[0]=='Q') printf("%d\n",query(1,1,n,a,b));
else if(s[0]=='U') update(1,1,n,a,b);
}
}
return 0;
}欢迎各位找茬~ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线段树