hdu 1754
来源:互联网 发布:ubuntu下安装apt get 编辑:程序博客网 时间:2024/05/16 18:56
#include<iostream>#include<stdio.h>#include<cmath>#include<limits.h>#include<string.h>#define MAX 200000#define L(x) (x<<1)#define R(x) (x<<1|1)using namespace std;struct node { int l; int r; int val ;}a[MAX*3];int soc[MAX];void build(int t,int l,int r){ a[t].l=l; a[t].r=r; if(l>=r) { a[t].val=soc[l]; return ; } int mid=(l+r)/2; build(L(t),l,mid); build(R(t),mid+1,r); a[t].val=max(a[L(t)].val,a[R(t)].val);}void insert(int t,int p,int v){ int l=a[t].l; int r=a[t].r; int m=l+(r-l)/2; if(l==r) a[t].val=v; else { if(p<=m) insert(L(t),p,v); else insert(R(t),p,v); a[t].val=max(a[L(t)].val,a[R(t)].val); }}int query(int t,int ql,int qr){ int l=a[t].l; int r=a[t].r; int m=l+(r-l)/2; int ans=INT_MIN; if(ql<=l&&r<=qr)return a[t].val; if(ql<=m)ans=max(ans,query(L(t),ql,qr)); if(m<qr)ans=max(ans,query(R(t),ql,qr)); return ans;}int main(){ int m,n,i,j; char c; int p,v; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&soc[i]); build(1,1,n); for(i=0;i<m;i++) { cin>>c>>p>>v; if(c=='Q') printf("%d\n",query(0,p,v)); else insert(1,p,v); } } return 0;}
用G++可以过,用c++wa,这是为什么