求调,全WA
查看原帖
求调,全WA
1258467
hao12345ia楼主2024/11/23 14:42
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[10000001];
int tree[40000001];
int lazy[40000001];
void build(int u,int x ,int y){
	if(x==y){
		tree[u]=a[x];
		return ;
	}
	int mid=(x+y)/2;
	build(u*2,x,mid);
	build(u*2+1,mid+1,y);
	tree[u]+=tree[u*2]+tree[u*2+1];
}
void duodiangai(int u,int x,int y,int l,int r,int c){
	if(l>=x&&r<=y){
		tree[u]+=(r-l+1)*c;
		lazy[u]+=c;
		return ;
	}
	int mid=(l+r)/2;
	if(lazy[u]>=0){
		tree[u*2]+=(mid-l+1)*lazy[u];
		lazy[u*2]+=lazy[u];
		tree[u*2+1]+=(r-mid)*lazy[u];
		lazy[u*2+1]+=lazy[u];
		lazy[u]=0;
	}
	if(l>=x){
		duodiangai(u*2,x,y,l,mid,c);
	}
	if(r<=y){
		duodiangai(u*2+1,x,y,mid+1,r,c);
	}
}//区间修改 
long long duodiancha(int u,int x,int y,int l,int r){
	if(l>=x&&r<=y){
		return tree[u];
	}
	int mid=(l+r)/2;
	if(lazy[u]>0){
		tree[u*2]+=(mid-l+1)*lazy[u];
		lazy[u*2]+=lazy[u];
		tree[u*2+1]+=(r-mid)*lazy[u];
		lazy[u*2+1]+=lazy[u];
		lazy[u]=0;
	}
	long long ans=0;
	if(l>=x){
		ans+=duodiancha(u*2,x,y,l,mid);
	}	
	if(r<=y){
		ans+=duodiancha(u*2+1,x,y,mid+1,r);
	}
	return ans;
}// 区间查询 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,1,n);
	for(int i=1;i<=n;i++){
		cout<<duodiancha(1,1,i,1,n)<<endl;
	}
	for(int i=1;i<=m;i++){
		int b;
		int x,y,k;
		cin>>b;
		if(b==1){
			cin>>x>>y>>k;
			duodiangai(1,x,y,1,n,k);
		}
		else{
			cin>>x>>y;
			cout<<duodiancha(1,x,y,1,n)<<endl;
		}
	}
}
2024/11/23 14:42
加载中...