线段树0...样例没过都
  • 板块P1531 I Hate It
  • 楼主Fugeg
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/4/14 19:41
  • 上次更新2023/10/23 18:30:41
查看原帖
线段树0...样例没过都
867346
Fugeg楼主2023/4/14 19:41
/*线段树点更新、区间查询*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
#define ls rt<<1
#define rs rt<<1||1
int n,m,a[maxn];
int h[maxn<<2];
inline void push_up(int rt){
	h[rt]=max(h[ls],h[rs]);
}
inline void build(int rt,int l,int r){
	if(l==r){
		h[rt]=a[l];
		return;
	}
	int mid=(l+r)>>1;
	build(ls,l,mid);
	build(rs,mid+1,r);
	push_up(rt);
}
inline void modify(int rt,int l,int r,int x,int y){
	if(l==r){
		if(h[rt]<y)	h[rt]=y;
		return;
	}
	int mid=(l+r)>>1;
	if(x<=mid)	modify(ls,l,mid,x,y);
	else	modify(rs,mid+1,r,x,y);
	push_up(rt);
}
inline int query(int rt,int l,int r,int x,int y){
	if(x<=l&&r<=y)	return h[rt];
	int mid=(l+r)>>1;
	int ans=-1e9;
	if(x<=mid)	ans=max(ans,query(ls,l,mid,x,y));
	if(y>mid)	ans=max(ans,query(rs,mid+1,r,x,y));
	return ans;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)	cin>>a[i];
	build(1,1,n);
	for(int i=1;i<=m;i++){
		char q;
		int x,y;
		cin>>q>>x>>y;
		if(q=='Q')	cout<<query(1,1,n,x,y)<<endl;
		else	modify(1,1,n,x,y);
	}
	return 0;
}
2023/4/14 19:41
加载中...