RE 求助
查看原帖
RE 求助
398310
hundunqidian楼主2022/7/29 09:49

本机上样例能过,但测试点都是RE,下载测试点1后测了一下,main里面不知道什么原因只能输入到a[n-1]

#include<bits/stdc++.h>
using namespace std;
int const X=1e7+10;
int n,m,a[X],tx,x,y,ans[X<<2];
char c;
inline int ls(int rt){
   return rt<<2;
}
inline int rs(int rt){
   return rt<<2 | 1;
}
void push_up(int rt){
   ans[rt]=max(ans[ls(rt)],ans[rs(rt)]);
}
void build(int rt,int L,int R){
   if(L==R){
   	ans[rt]=a[L];
   	return ;
   }
   int mid=(L+R)>>1;
   build(ls(rt),L,mid);
   build(rs(rt),mid+1,R);
   push_up(rt);
}
int query(int rt,int L,int R,int qL,int qR){
   if(qL<=L && R<=qR){
   	return ans[rt];
   }
   int mid=(L+R)>>1,res=-1e9;
   if(mid>=qL){
   	res=max(res,query(ls(rt),L,mid,qL,qR));
   }
   if(mid+1<=qR){
   	res=max(res,query(rs(rt),mid+1,R,qL,qR));	
   }
   return res;
}
void change(int rt,int L,int R,int p,int k){
   if(L==R){
   	if(ans[rt]<k) ans[rt]=k;
   	return ;
   }
   int mid=(L+R)>>1;
   if(mid>=p){
   	change(ls(rt),L,mid,p,k);
   }
   else{
   	change(rs(rt),mid+1,R,p,k);
   }
   push_up(rt);
}
int main(){
   cin>>n>>m;
   for(int i=1;i<=n;i++){
   	cin>>a[i];
   }
   build(1,1,n);
   while(m--){
   	cin>>c>>x>>y;
   	if(c=='Q'){
   		cout<<query(1,1,n,x,y)<<endl;
   	}
   	else if(c=='U'){
   		change(1,1,n,x,y);
   	}
   }
   return 0;
} 
2022/7/29 09:49
加载中...