代码(10分):
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[100010],n,m,t[400010],f1[400010];
void push(int l,int r,int fa){
int mid=(l+r)/2;
t[fa*2]+=f1[fa]*(mid-l+1);
f1[fa*2]+=f1[fa];
t[fa*2+1]+=f1[fa]*(r-mid);
f1[fa*2+1]+=f1[fa];
f1[fa]=0;
}
void b(int fa,int l,int r){
if(l==r){
t[fa]=a[l];
return ;
}
int mid=(l+r)/2;
b(fa*2,l,mid);
b(fa*2+1,mid+1,r);
t[fa]=t[fa*2]+t[fa*2+1];
}
int f(int ql,int qr,int l,int r,int fa){
int ans=0;
if(ql<=l&&qr>=r){
return t[fa];
}
int mid=(l+r)/2;
push(l,r,fa);
if(ql<=mid){
ans+=f(ql,qr,l,mid,fa*2);
}
if(qr>mid){
ans+=f(ql,qr,mid+1,r,fa*2+1);
}
return ans;
}
void c(int ql,int qr,int l,int r,int fa,int k){
if(ql<=l&&qr>=r){
t[fa]+=k*(r-l+1);
f1[fa]=k;
return ;
}
push(l,r,fa);
int mid=(l+r)/2;
if(ql<=mid) c(ql,qr,l,mid,fa*2,k);
if(qr>mid) c(ql,qr,mid+1,r,fa*2+1,k);
t[fa]=t[fa*2]+t[fa*2+1];
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
b(1,1,n);
while(m--){
int op,x,y;
cin>>op>>x>>y;
if(op==1){
int z;
cin>>z;
c(x,y,1,n,1,z);
}
if(op==2){
cout<<f(x,y,1,n,1)<<endl;
}
}
return 0;
}