0分求条!!!
  • 板块灌水区
  • 楼主kkkkks03
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/5 20:07
  • 上次更新2024/12/5 22:57:27
查看原帖
0分求条!!!
1219636
kkkkks03楼主2024/12/5 20:07

this

#include<bits/stdc++.h>
using namespace std;
long long tree[414514],n,m,a[114541];
long long lasy[414514];
#define ll long long 
inline void build(ll l,ll r,ll p){
	lasy[p]=0;
	if(l==r){
		tree[p]=a[l];
		return ;
	}
	ll mid=(l+r)>>1;
	build(l,mid,p<<1);
	build(mid+1,r,p<<1|1);
	tree[p]=tree[p<<1]+tree[p<<1|1];
}
inline void ch(ll p,ll l,ll r,ll k){
	tree[p]+=k*(r-l+1);
	lasy[p]+=k;
}
inline void pd(ll p,ll l,ll r){
	ll mid=(l+r)>>1;
	ch(p<<1,l,mid,lasy[p]);
	ch(p<<1|1,mid+1,r,lasy[p]);
	lasy[p]=0;
}
inline void data(ll l,ll r,ll x,ll y,ll p,ll k){
	if(x<=l&&y>=r){
		tree[p]+=k*(r-l+1);
		lasy[p]+=k;
		return ;
	}
	pd(p,l,r);
	ll mid=(l+r)>>1;
	if(mid>=x){
		data(l,mid,x,y,p<<1,k);
	}
	if(mid<y){
		data(mid+1,r,x,y,p<<1|1,k);
	}
	tree[p]=tree[p<<1]+tree[p<<1|1];
}
ll qqq(ll l,ll r,ll x,ll y,ll p){
	ll mid=(l+r)>>1;
	ll s=0;
	if(x<=l&&y>=r){
		return tree[p];
	}
	pd(p,l,r);
	if(mid>=x){
		s+=qqq(l,mid,x,y,p<<1);
	}
	if(mid<y){
		s+=qqq(mid+1,r,x,y,p<<1|1);
	}
	return s;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	build(1,n,1);
	for(int i=1;i<=m;i++){
		int f,x,y,z;
		cin>>f;
		if(f==1){
			cin>>x>>y>>z;
			data(1,n,x,y,z,1);
		}
		else {
			cin>>x>>y;
			cout<<qqq(1,n,x,y,1)<<"\n";
		}
	}
	return 0;
} 
2024/12/5 20:07
加载中...