20pts求助
查看原帖
20pts求助
542633
ma_yu_chen_楼主2025/7/25 11:50
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int data[N],m,n;
struct tree{
	int l,r,ma;
}tr[(N<<2)+5];
void pu(int p){
	tr[p].ma=max(tr[p<<1].ma,tr[p<<1|1].ma);
}
void build(int p,int l,int r){
	tr[p].l=l,tr[p].r=r;
	if(l==r){
		tr[p].ma=data[l];
		return ;
	}
	int mid=l+r>>1;
	build(p<<1,l,mid);
	build(p<<1|1,mid+1,r);
	pu(p);
}
int ask(int p,int l,int r){
	if(l<=tr[p].l&&tr[p].r<=r){
		return tr[p].ma;
	}
	int ans=0;
	int mid=tr[p].l+tr[p].r>>1;
	if(l<=mid) ans=max(ans,ask(p<<1,l,r));
	if(r>mid) ans=max(ans,ask(p<<1|1,l,r));
	return ans;
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=m;i++) cin>>data[i];
	build(1,1,m);
	for(int i=1;i<=n;i++){
		char c;
		int a,b;
		cin>>c>>a>>b;
		if(c=='Q')
			cout<<ask(1,a,b)<<'\n';
		else{
			if(data[a]<data[b]){
				swap(data[a],data[b]);
				build(1,1,m);
			}
		}
	}
	return 0;
}
2025/7/25 11:50
加载中...