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,这是为什么