#include<bits/stdc++.h>
using namespace std;
long int in[401000];
struct errer{
int r,l,lz=-1,sum=0;
}a[400100];
long int read(){
int zf=1,az=getchar(),zhi=0;
if(az<='0'||az>='9'){
if(az=='-')
zf=-1;
az=getchar();
}
while(az>='0'&&az<='9'){
zhi=zhi*10+az-'0';
az=getchar();
}
return zhi*zf;
}
void jian(int wz,int z,int y){
if(z==y){
a[wz].sum=in[z];
return ;
}
a[wz].l=z;a[wz].r=y;
int mid=(z+y)/2;
jian(wz*2,z,mid);
jian(wz*2+1,mid+1,y);
a[wz].sum=a[wz*2].sum+a[wz*2+1].sum;
return;
}
void jia(int wz,int z,int y,int zhi){
if(a[wz].l<z||a[wz].r>y)
return;
if(a[wz].l>=z&&a[wz].r<=y){
a[wz].lz=zhi;
return;
}
int mid=(z+y)/2;
if(a[wz].l>z&&a[wz*2].r<y)
jia(wz*2,z,mid,zhi);
if(a[wz].l<y&&a[wz*2+1].l>z)
jia(wz*2+1,mid+1,y,zhi);
}
void tui(int wz){
if(a[wz*2].lz==-1) a[wz*2].lz=a[wz].lz;
else a[wz*2].lz+=a[wz].lz;
if(a[wz*2+1].lz==-1) a[wz*2+1].lz=a[wz].lz;
else a[wz*2+1].lz+=a[wz].lz;
}
int qiu(int wz,int z,int y){
if(a[wz].r<z&&a[wz].l>y) return 0;
if(a[wz].r>=z&&a[wz].l<=y){
if(a[wz].lz==-1)
return a[wz].sum;
else
return a[wz].lz*(a[wz].l-a[wz].r+1)+a[wz].sum;
}
tui(wz);
int mid=(z+y)/2;
return qiu(wz*2,z,mid)+qiu(wz*2+1,mid+1,y);
}
int main() {
long long int i,n,m,op=0;
n=read();
m=read();
for(i=1;i<=n;i++)
in[i]=read();
jian(1,1,n);
for(i=1;i<=m;i++){
op=read();
int x=read(),y=read(),z;
if(op==1){
z=read();
jia(1,x,y,z);
}
if(op==2){
cout<<qiu(1,x,y)<<endl;
}
}
return 0;
}
我是不是打了很多没用的判断