RE求条QWQ
查看原帖
RE求条QWQ
1041859
space_P楼主2024/11/24 20:38
#include<bits/stdc++.h>
#define endl '\n'
#define intmid int mid=(l+r)>>1
using namespace std;
const int N=1011111,mi=-1111111111;
int n,q,a[N];
int tr[N<<2]={0},lt[N<<2][3]={0};
int fr(){
	int x=0,f=1;
	char ch=getchar();
	while(ch < '0' || ch > '9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch >='0' && ch <= '9'){
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
int ls(int k){
	return k<<1;
}
int rs(int k){
	return (k<<1)|1;
}
void pu(int k){
	tr[k]=tr[ls(k)] > tr[rs(k)] ? tr[ls(k)] : tr[rs(k)];
}
void pd(int k){
	if(lt[k][0]){
		tr[ls(k)]=lt[k][0];
		lt[ls(k)][0]=lt[k][0];
		lt[ls(k)][1]=0;
		tr[rs(k)]=lt[k][0];
		lt[rs(k)][0]=lt[k][0];
		lt[rs(k)][1]=0;
		lt[k][0]=mi;
		return;
	}
	tr[ls(k)]+=lt[k][1];
	lt[ls(k)][1]=lt[k][1];
	tr[rs(k)]+=lt[k][1];
	lt[rs(k)][1]=lt[k][1];
	lt[k][1]=0;
}
void blind(int k,int l,int r){
	lt[k][0]=mi;
	lt[k][1]=0;
	if(l==r){
		tr[k]=a[l];
		return;
	}
	intmid;
	blind(ls(k),l,mid);
	blind(rs(k),mid+1,r);
	pu(k);
}
void ru(int k,int l,int r,int op,int ul,int ur,int x){
	if(ul > r || ur < l) return;
	pd(k);
	if(op^1){
		if(ul <= l && ur >= r){
			lt[k][1]+=x;
		}
		intmid;
		ru(ls(k),l,mid,op,ul,ur,x);
		ru(rs(k),mid+1,r,op,ul,ur,x);
		pu(k);
		return;
	}
	if(ul <= l && ur >= r){
		lt[k][0]=x;
	}
	intmid;
	ru(ls(k),l,mid,op,ul,ur,x);
	ru(rs(k),mid+1,r,op,ul,ur,x);
	pu(k);
}
int rq(int k,int l,int r,int ql,int qr){
	if(l > qr || r < ql) return mi;
	pd(k);
	if(l >= ql && r <= qr) return tr[k];
	intmid;
	return max(rq(ls(k),l,mid,ql,qr),rq(rs(k),mid+1,r,ql,qr));
}
int main(){
	n=fr();q=fr();
	for(int i=1;i<=n;i++){
		a[i]=fr();
	}
	blind(1,1,n);
	while(q--){
		int op=fr();	
		if(op==3){
			int ql=fr(),qr=fr();
			cout<<rq(1,1,n,ql,qr);
			putchar('\n');
		}
		else {
			int ul=fr(),ur=fr(),x=fr();
			ru(1,1,n,op,ul,ur,x);
		}
	}
	return 0;
}
2024/11/24 20:38
加载中...