萌新60pts代码求助,谢谢!!!
  • 板块P1531 I Hate It
  • 楼主cjx666
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/8/29 11:53
  • 上次更新2023/11/4 08:39:34
查看原帖
萌新60pts代码求助,谢谢!!!
474133
cjx666楼主2021/8/29 11:53
#include<iostream>
#include<cstdio>
using namespace std;
#define int long long
#define maxn 9000050
#define pf  printf
#define sc scanf
#define re register

struct node{
	int l,r;
	int big;
}e[maxn];

int number[maxn];

void updata(int k){
	e[k].big=max(e[k*2].big,e[k*2+1].big);
}

void build(int k,int l,int r){
	e[k].l=l;
	e[k].r=r;
	if(l==r){
		e[k].big=number[l];
		return;
	}
	int mid=(e[k].l+e[k].r)/2;
	build(k*2,l,mid);
	build(k*2+1,mid+1,r);
	updata(k);
}

int query(int k,int l,int r,int a,int b){
	if(a<=l&&r<=b){
		return e[k].big;
	}
	int mid=(e[k].l+e[k].r)/2;
	int res=-9999999999999;
	if(a<=mid){
		res=max(res,query(k*2,l,mid,a,b));
	}
	if(b>mid){
		res=max(res,query(k*2+1,mid+1,r,a,b));
	}
	return res;
}

void change(int k,int l,int r,int x,int w){
	if(l==r&&l==x){
		if(e[k].big<w){
			e[k].big=w;
			return;	
		}
	}
	int mid=(e[k].l+e[k].r)/2;
	if(x<=mid){
		change(k*2,l,mid,x,w);
	}else{
		change(k*2+1,mid+1,r,x,w);
	}
	updata(k);
}

signed main(){
	freopen("P1531_2.in","r",stdin);
	freopen("out.doc","w",stdout);
	int n,m;
	sc("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++){
		sc("%lld",&number[i]);
	}
	build(1,1,n);
	while(m--){
		char opt;
		cin>>opt;
		if(opt=='Q'){
			int a,b;
			sc("%lld%lld",&a,&b);
			cout<<query(1,1,n,a,b)<<endl;
		}
		if(opt=='U'){
			int a,c;
			sc("%lld%lld",&a,&c);
			   change(1,1,n,a,c);
		}
	}
	return 0;
} 

/*5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5*/
2021/8/29 11:53
加载中...