别用scanf提取操作...
详细原因我不知道,用cin就过了。
可能是测评机编译器问题,本地编译和hdu上的这道题随便过...
#include<bits/stdc++.h>
using namespace std;
#define puu pushup(rt);
const int maxn=2e5+10;
int A[maxn];
struct{
int val,l,r;
}st[maxn*4];
void pushup(int rt){
st[rt].val=max(st[rt*2].val,st[rt*2+1].val);
}
void build(int l,int r,int rt){
st[rt].l=l;
st[rt].r=r;
if(l==r){
st[rt].val=A[l];
return;
}
int m=l+r>>1;
build(l,m,rt*2);
build(m+1,r,rt*2+1);
puu;
}
void update(int rt,int a,int c){
int l=st[rt].l;
int r=st[rt].r;
if(l==r){
st[rt].val=max(st[rt].val,c);
return;
}
int m=l+r>>1;
if(a<=m){
update(rt*2,a,c);
}
else{
update(rt*2+1,a,c);
}
puu;
}
int query(int rt,int s,int e){
int r=st[rt].r;
int l=st[rt].l;
if(s<=l&&r<=e){
return st[rt].val;
}
if(r<s||e<l)
return 0;
return max(query(rt*2,s,e),query(rt*2+1,s,e));
}
int main(){
int n,ma;
scanf("%d%d",&n,&ma);
int i,j;
for(i=1;i<=n;i++)
scanf("%d",&A[i]);
build(1,n,1);
char op;
int a,b;
while(ma--){
getchar();
scanf("%c%d%d",&op,&a,&b);//<-------
if(op=='Q')
printf("%d\n",query(1,a,b));
else
update(1,a,b);
}
return 0;
}
别抄哈,这是0分代码:>