80分求助
  • 板块P1531 I Hate It
  • 楼主yemanlin
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/8/24 15:34
  • 上次更新2023/10/27 13:52:29
查看原帖
80分求助
362160
yemanlin楼主2022/8/24 15:34
#include <bits/stdc++.h>
#define N 200005
using namespace std;

int n,m;
int a[N];char ch;
int maxx[N<<2];

void push_up(int k){
	maxx[k]=max(maxx[k<<1],maxx[k<<1|1]);
}

void build (int k,int l,int r){
	if (l==r){
		maxx[k]=a[l];
		return;
	}int mid=(l+r)>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	push_up(k);
}

int query(int k,int l,int r,int L,int R){
	if (L<=l&&r<=R) return maxx[k];
	int mid=(l+r)>>1;int t1=0,t2=0;
	if (L<=mid) t1=query(k<<1,l,mid,L,R);
	if (R>mid) t2=query(k<<1|1,mid+1,r,L,R);
	return max(t1,t2);
}

void change(int k,int l,int r,int x,int y){
	if (l==r){
		if (maxx[k]<y) maxx[k]=y;
		return;
	}int mid=(l+r)>>1;
	if (x<=mid) change(k<<1,l,mid,x,y);
	else change(k<<1|1,mid+1,r,x,y);
	push_up(k); 
}

int main(){
	scanf("%d%d",&n,&m);
	for (int i=0;i<=n;i++){
		scanf("%d",&a[i]);
	}build (1,1,n);int l,r,x,y;
	for (int i=1;i<=m;i++){
		cin>>ch;
		if (ch=='Q'){scanf("%d%d",&l,&r);
			int temp=query(1,1,n,l,r);
			printf("%d\n",temp);
		}else(ch=='U'){scanf("%d%d",&x,&y);
			change(1,1,n,x,y);
		}
	}
	
}
2022/8/24 15:34
加载中...