HDU 1754 线段树
来源:互联网 发布:常用服务器端口有哪些 编辑:程序博客网 时间:2024/05/17 13:08
#include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<cctype>#include<iomanip>#define Lson left , t , rt<<1#define Rson t+1 ,right,rt<<1|1using namespace std;const int maxn=200005;int f[maxn<<2];void PushUP( int rt ){ f[rt] = max( f[rt<<1], f[rt<<1|1] );}void build( int left, int right ,int rt ){ if( left==right ){ cin>>f[rt]; return; } int t=(left + right)>>1; build(Lson); build(Rson); PushUP(rt);}void update(int ii,int value,int left, int right, int rt ){ if( left == right ){ f[rt] = value; return; } int t=(left+right)>>1; if(ii<=t) update(ii, value, Lson); else update(ii, value, Rson); PushUP(rt);}int query(int l, int r, int left, int right, int rt ){ if( l<=left && r>=right ) return f[rt]; int t=(left+right)/2; int ret = 0; if(l <= t)ret = max(ret, query( l, r, Lson) ); if(r > t) ret = max(ret, query( l, r, Rson) ); return ret;}int main(){ int n,m; while(cin>>n>>m){ build(1,n,1); while(m--){ char C; int a,b;//for(int i=0;i<=n;++i)cout<<f[i]<<' ';cout<<endl; cin>>C>>a>>b; if(C=='Q') cout<<query(a,b,1,n,1)<<endl; else update(a,b,1,n,1); } } return 0;}