WA 60pts 求调QWQ
查看原帖
WA 60pts 求调QWQ
1041859
space_P楼主2024/11/26 19:50
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define intmid long long mid=(l+r)>>1
using namespace std;
const int N=1011111;
const ll mi=-1e18;
int n,q,a[N];
ll tr[N<<2],lt[N<<2][3];
inline ll fr(){
	ll 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;
}
ll ls(ll k){
	return k<<1;
}
ll rs(ll k){
	return (k<<1)|1;
}
void pu(ll k){
	tr[k]=tr[ls(k)] > tr[rs(k)] ? tr[ls(k)] : tr[rs(k)];
}
void pd(ll k){
	if(lt[k][0]!=mi){
		lt[ls(k)][0]=lt[k][0];
		lt[rs(k)][0]=lt[k][0];
		tr[ls(k)]=lt[k][0];
		tr[rs(k)]=lt[k][0];
		lt[rs(k)][1]=0;
		lt[ls(k)][1]=0;
		lt[k][0]=mi;
		lt[k][1]=0;
		return;
	}
	tr[ls(k)]+=lt[k][1];
	tr[rs(k)]+=lt[k][1];
	lt[ls(k)][1]+=lt[k][1];
	lt[rs(k)][1]+=lt[k][1];
	lt[k][1]=0;
}
void blind(ll k,ll l,ll r){
	lt[k][0]=mi;
	if(l==r){
		tr[k]=a[l];
		return;
	}
	intmid;
	blind(ls(k),l,mid);
	blind(rs(k),mid+1,r);
	pu(k);
}
void ru(ll k,ll l,ll r,ll op,ll ul,ll ur,ll x){
	if(ul > r || ur < l) return;
	pd(k);
	if(op^1){
		if(ul <= l && ur >= r){
			lt[k][1]+=x;
			tr[k]+=x;
			return;
		}
		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;
		tr[k]=x;
		return;
	}
	intmid;
	ru(ls(k),l,mid,op,ul,ur,x);
	ru(rs(k),mid+1,r,op,ul,ur,x);
	pu(k);
}
ll rq(ll k,ll l,ll r,ll ql,ll 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--){
		ll op=fr();
		if(op==3){
			ll ql=fr(),qr=fr();
			cout<<rq(1,1,n,ql,qr);
			putchar('\n');
		}
		else {
			ll ul=fr(),ur=fr(),x=fr();
			ru(1,1,n,op,ul,ur,x);
		}
	}
	return 0;
}
2024/11/26 19:50
加载中...