#include<bits/stdc++.h>
using namespace std;
struct node{
int sum;
int lazy;
}tree[400005];
int n,a[100001],x,y,m,v,aa;
void jianshu(int id,int l,int r){
if(l==r){
tree[id].sum=a[l];
return ;
}
int mid=(l+r)/2;
jianshu(id*2,l,mid);
jianshu(id*2+1,mid+1,r);
tree[id].sum=(tree[id*2].sum+tree[id*2+1].sum);
}
void xiafa(int id,int l,int r){
if(tree[id].lazy){
int mid=(l+r)/2;
tree[id*2].lazy+=tree[id].lazy;
tree[id*2].sum+=(tree[id].lazy*(mid-l+1));
tree[id*2+1].lazy+=tree[id].lazy;
tree[id*2+1].sum+=(tree[id].lazy*(r-mid+1));
tree[id].lazy=0;
}
}
void qjgx(int id,int l,int r){
if(l<=x&&y<=r){
tree[id].lazy+=v;
tree[id].sum+=v*(r-l+1);
}
xiafa(id,l,r);
int mid=(l+r)/2;
if(x<=mid) qjgx(id*2,l,mid);
if(y>mid) qjgx(id*2+1,mid+1,r);
tree[id].sum=tree[id*2].sum+tree[id*2+1].sum;
}
int find(int id,int l,int r){
if(l<=x&&y<=r) return tree[id].sum;
xiafa(id,l,r);
int ma=0,mid=(l+r)/2;
if(x<=mid) ma+=find(id*2,l,mid);
if(y>mid) ma+=find(id*2+1,mid+1,r);
return ma;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
jianshu(1,1,n);
for(int i=1;i<=m;i++){
cin>>aa;
if(aa==2){
cin>>x>>y;
cout<<find(1,1,n)<<endl;
}
else{
cin>>x>>y>>v;
qjgx(1,1,n);
}
}
}
悬赏一个解决方案和五个赞