hdu 1754 单点更新

来源:互联网 发布:股票委托交易软件讲解 编辑:程序博客网 时间:2024/05/02 02:18
#include<bits/stdc++.h>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=200000+10;int n,m;long long tree[maxn<<2];void PushUp(int rt){tree[rt]=max(tree[rt<<1],tree[rt<<1|1]);}void build(int l,int r,int rt){if(l==r){scanf("%I64d",&tree[rt]);return ;}int m=(l+r)>>1;build(lson);build(rson);PushUp(rt);}void update(int p,int x,int l,int r,int rt){if(l==r){tree[rt]=x;return ;}int m=(l+r)>>1;if(p<=m)update(p,x,lson);elseupdate(p,x,rson);PushUp(rt);}long long query(int L,int R,int l,int r,int rt){if(L<=l && r<=R)return tree[rt];int m=(l+r)>>1;long long ans=-1;if(L<=m)ans=max(ans,query(L,R,lson));if(R>m)ans=max(ans,query(L,R,rson));return ans;}int main(void){char input[5];long long a,b;while(cin>>n>>m){build(1,n,1);while(m--){scanf("%s%I64d%I64d",input,&a,&b);if(input[0]=='Q')printf("%I64d\n",query(a,b,1,n,1));elseupdate(a,b,1,n,1);}}return 0;}

0 0