请求帮助
查看原帖
请求帮助
1057461
flybirdyujunze楼主2023/9/27 21:08
#include <bits/stdc++.h>
#pragma GCC otpimize("O2")
#define int long long
using namespace std;
int n,m,i,sb,sa,v[200001],a[400001];
char z;
void build(int k,int t,int w){
	int mid;
	if(t==w){
		a[k]+=v[t];
		return; 
	}
	mid=(t+w)>>1;
	build(k*2,t,mid);
	build(k*2+1,mid+1,w);
	a[k]=max(a[k*2],a[k*2+1]);
}
int ask(int k,int t,int w,int x,int y){
	int mid;
	if(y<t||x>w) return -2147483647; 
	if(x<=t&&w<=y)
		return a[k];
	mid=(t+w)/2;
	return max(ask(k*2,t,mid,x,y),ask(k*2+1,mid+1,w,x,y));
}
void xg(int k,int t,int w,int now,int will){
	int mid;
	if(w<now||t>now) return ;
	if(t==w&&t==now){
		a[k]=will;
		return; 
	}
	mid=(t+w)>>1;
	xg(k*2,t,mid,now,will);
	xg(k*2+1,mid+1,w,now,will);
	a[k]=max(a[k*2],a[k*2+1]);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(NULL);cout.tie(NULL);
	cin>>n>>m;
	for(i=1;i<=n;i++) cin>>v[i];
	build(1,1,n);
	for(i=1;i<=m;i++){
		cin>>z>>sa>>sb;
		if(z=='Q') cout<<ask(1,1,n,sa,sb)<<"\n";
		if(z=='U') 
			if(v[sa]<v[sb])
				xg(1,1,n,sa,v[sb]);
	}
}
2023/9/27 21:08
加载中...