0分求解 一个测试点TLE其他全WA了
  • 板块P1531 I Hate It
  • 楼主CYJ331
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/6 01:41
  • 上次更新2024/4/6 10:22:19
查看原帖
0分求解 一个测试点TLE其他全WA了
818995
CYJ331楼主2024/4/6 01:41
#include <cstdio>
#include <iostream>
using namespace std;
const int N=2e5+2;
int n,m,a[N],tree[2*N];
inline void build(int l,int r,int x){
	if(l==r){
		tree[x]=a[l];
		return ;
	}
	int mid=(l+r)>>1;
	build(l,mid,x+1);
	build(mid+1,r,x+((mid-l+1)<<1));
	tree[x]=max(tree[x+1],tree[x+((mid-l+1)<<1)]);
}
inline int find(int l,int r,int x,int y,int k){
	if(x<=l&&r<=y)
		return tree[k];
	if(l>=r)
		return 0;
	int mid=(l+r)>>1;
	return max(find(l,mid,x,y,k+1),find(mid+1,r,x,y,k+((mid-l+1)<<1)));
}
inline void change(int l,int r,int p,int k){
	if(l==r){
		tree[k]=a[p];
		return ;
	}
	int mid=(l+r)>>1;
	if(p<=mid)
		change(l,mid,p,k+1);
	if(p>mid)
		change(mid+1,r,p,k+((mid-l+1)<<1));
	tree[k]=max(tree[k+1],tree[k+((mid-l+1)<<1)]);
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);  
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	build(1,n,1);
	for(int i=1;i<=m;i++){
		char c;
		int x,y;
		cin>>c>>x>>y;
		if(c=='Q')
			printf("%d\n",find(1,n,x,y,1));
		else {
			if(a[x]<y)
				a[x]=y,change(1,n,x,1);
		}
	}
	return 0;
} 
2024/4/6 01:41
加载中...