0ptsWA求条
查看原帖
0ptsWA求条
1329138
luogu_hezhenmin1楼主2024/12/4 19:53
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
const int N=2e5+5;
struct node{
	int l,r,sum;
}tr[N<<2];
int a[N];
void build(int l,int r,int i){
	tr[i].l=l,tr[i].r=r;
	if(l==r){
		tr[i].sum=a[i];
		return;
	}
	int mid=(l+r)>>1;
	build(l,mid,i<<1);
	build(mid+1,r,i<<1|1);
	tr[i].sum=max(tr[i<<1].sum,tr[i<<1|1].sum);
}
void add(int x,int k,int i){
	if(tr[i].l==tr[i].r and tr[i].l==x){
		if(tr[i].sum<k)tr[i].sum=k;
		return;
	}
	if(tr[i<<1].r>=x) add(x,k,i<<1);
	else add(x,k,i<<1|1);
	tr[i].sum=max(tr[i<<1].sum,tr[i<<1|1].sum);
	return;
}
int ask(int l,int r,int i){
	if(tr[i].l>=l and tr[i].r<=r) return tr[i].sum;
	if(tr[i].l>r or tr[i].r<l) return -1;
	int s=-1;
	if(tr[i<<1].r>=l) s=max(s,ask(l,r,i<<1));
	if(tr[i<<1|1].l<=r) s=max(s,ask(l,r,i<<1|1));
	return s;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	build(1,n,1);
	while(m--){
		char op;
		int a,b;
		cin>>op>>a>>b;
		if(op=='Q')
			cout<<ask(a,b,1)<<'\n';
		else
			add(a,b,1);
	}
	return 0;
}
2024/12/4 19:53
加载中...