过不了样例求调
查看原帖
过不了样例求调
1546843
HTML19990601楼主2025/7/31 23:01
#include<bits/stdc++.h>

using namespace std;

int n,q,m;
long long data1[100001];
long long tree[400001];
long long lazy[400001];
//long long lazy2[400001] = {1};
long long lazy2[400001];

void build(int node,int l,int r){
	if(l==r){
		tree[node] = data1[l];
		return;
	}
	int mid = (l+r)/2;
	build(2*node,l,mid);
	build(2*node+1,mid+1,r);
	tree[node] = tree[2*node] + tree[2*node+1];
}

void pushdown(int node,int l,int r){
	if(lazy[node] == 0 and lazy2[node] == 1)return;
	int mid = (l+r)/2;
	tree[2*node] *= lazy2[node];
	tree[2*node+1] *= lazy2[node];
	tree[2*node] += lazy[node]*(mid-l+1);
	tree[2*node+1] += lazy[node]*(r-mid);
	lazy[2*node] *= lazy2[node];
	lazy[2*node] += lazy[node];
	lazy[2*node+1] *= lazy2[node];
	lazy[2*node+1] += lazy[node];
	lazy2[2*node] *= lazy2[node];
	lazy2[2*node+1] *= lazy2[node];
	lazy[node] = 0;
	lazy2[node] = 1;
}

void update1(int node,int l,int r,int ul,int ur,long long val){
	if(r<ul or l>ur) return;
	if(l>=ul and r<=ur){
		if(lazy2[node] != 1){
			pushdown(node,l,r);
		}
		tree[node]+=val*(r-l+1);
		lazy[node]+=val;
		return;
	}
	pushdown(node,l,r);
	int mid = (l+r)/2;
	update1(2*node,l,mid,ul,ur,val);
	update1(2*node+1,mid+1,r,ul,ur,val);
	tree[node] = tree[2*node]+tree[2*node+1];
}

void update2(int node,int l,int r,int ul,int ur,long long val){
	if(r<ul or l>ur) return;
	if(l>=ul and r<=ur){
		tree[node]*=val;
		lazy[node]*=val;
		lazy2[node]*=val;
		return;
	}
	pushdown(node,l,r);
	int mid = (l+r)/2;
	update2(2*node,l,mid,ul,ur,val);
	update2(2*node+1,mid+1,r,ul,ur,val);
	tree[node] = tree[2*node]+tree[2*node+1];
}

long long get1(int node,int l,int r,int ul,int ur){
	if(r<ul or l>ur) return 0 ;
	if(l>=ul and r<=ur){
		return tree[node];
	}
	int mid = (l+r)/2;
	pushdown(node,l,r);
	return get1(2*node,l,mid,ul,ur)+get1(2*node+1,mid+1,r,ul,ur);
}

int main(){
	for (int i = 0; i < 400001; i++) {
		lazy2[i] = 1;
	}
	cin >> n >> q >> m;
	for(int i=1;i<=n;i++){
		cin >> data1[i];
	}
	bool b1 = false;
	for(int i=1;i<=q;i++){
		int p;
		cin >> p;
		if(p==1){
			int x,y,k;
			cin >> x >> y >> k;
			update2(1,1,n,x,y,k);
		}
		if(p==2){
			int x,y,k;
			cin >> x >> y >> k;
			update1(1,1,n,x,y,k);
		}
		if(p==3){
			int x,y;
			cin >> x >> y;
			if(b1) cout << endl;
			b1=true;
			cout << get1(1,1,n,x,y);
		}
	}
	return 0;
}
2025/7/31 23:01
加载中...