急救我
查看原帖
急救我
1839929
hrylittle楼主2025/8/29 00:12

我还没写操作1,按理来说60%的数据没有操作1,但是我只有10分为什么

#include <iostream>
#define ll long long
#define MAXX 1000005
using namespace std;

ll a[MAXX],n,q;

class ST{
	private:
		ll tree[MAXX*4];
		ll lazy_add[MAXX*4];
		
		void pushdown(int node,int l,int r){
			if(lazy_add[node]){
				tree[node*2]+=lazy_add[node];
				lazy_add[node*2]+=lazy_add[node];
				tree[node*2+1]+=lazy_add[node];
				lazy_add[node*2+1]+=lazy_add[node];
				lazy_add[node]=0;
			}
			return;
		}
	public:
		void build(int node,int l,int r){
			if(l==r){
				tree[node]=a[l];
				lazy_add[node]=0;
			}
			int mid=(l+r)/2;
			build(node*2,l,mid);
			build(node*2+1,mid+1,r); 
			tree[node]=max(tree[node*2],tree[node*2+1]);
			lazy_add[node]=0;
			return;
		}
		
		void updaterange_add(int node,int l,int r,int ql,int qr,int k){
			if(r<ql||l>qr) return;
			if(l>=ql&&r<=qr){
				tree[node]+=k;
				lazy_add[node]+=k;
				return;
			}
			pushdown(node,l,r);
			int mid=(l+r)/2;
			updaterange_add(node*2,l,mid,ql,qr,k);
			updaterange_add(node*2+1,mid+1,r,ql,qr,k);
			tree[node]=max(tree[node*2],tree[node*2+1]);
			return;
		}
		
		ll query(int node,int l,int r,int ql,int qr){
			if(r<ql||l>qr) return 0;
			if(l>=ql&&r<=qr) return tree[node];
			int mid=(l+r)/2;
			ll left=query(node*2,l,mid,ql,qr);
			ll right=query(node*2+1,mid+1,r,ql,qr);
			return max(left,right);
		}
}seg;

int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=q;i++){
		int op,l,r,k;
		cin>>op;
		if(op==1){
			cin>>l>>r>>k;
			
		}else if(op==2){
			cin>>l>>r>>k;
			seg.updaterange_add(1,1,n,l,r,k);
		}else{
			cout<<seg.query(1,1,n,l,r)<<endl;
		}
	}
	return 0;	
}

对了如果有空的话教一下操作1怎么弄。 。 。 。 本蒟蒻不会啊

2025/8/29 00:12
加载中...