RT
言 简 意 赅
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<sstream>
#include<cstdio>
#include<vector>
#include<stdio.h>
#include<cctype>
#include<ctime>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<fstream>
//#pragma GCC optimize(3)
//#pragma GCC target("avx")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("inline")
//#pragma GCC optimize("-fgcse")
//#pragma GCC optimize("-fgcse-lm")
//#pragma GCC optimize("-fipa-sra")
//#pragma GCC optimize("-ftree-pre")
//#pragma GCC optimize("-ftree-vrp")
//#pragma GCC optimize("-fpeephole2")
//#pragma GCC optimize("-ffast-math")
//#pragma GCC optimize("-fsched-spec")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("-falign-jumps")
//#pragma GCC optimize("-falign-loops")
//#pragma GCC optimize("-falign-labels")
//#pragma GCC optimize("-fdevirtualize")
//#pragma GCC optimize("-fcaller-saves")
//#pragma GCC optimize("-fcrossjumping")
//#pragma GCC optimize("-fthread-jumps")
//#pragma GCC optimize("-funroll-loops")
//#pragma GCC optimize("-fwhole-program")
//#pragma GCC optimize("-freorder-blocks")
//#pragma GCC optimize("-fschedule-insns")
//#pragma GCC optimize("inline-functions")
//#pragma GCC optimize("-ftree-tail-merge")
//#pragma GCC optimize("-fschedule-insns2")
//#pragma GCC optimize("-fstrict-aliasing")
//#pragma GCC optimize("-fstrict-overflow")
//#pragma GCC optimize("-falign-functions")
//#pragma GCC optimize("-fcse-skip-blocks")
//#pragma GCC optimize("-fcse-follow-jumps")
//#pragma GCC optimize("-fsched-interblock")
//#pragma GCC optimize("-fpartial-inlining")
//#pragma GCC optimize("no-stack-protector")
//#pragma GCC optimize("-freorder-functions")
//#pragma GCC optimize("-findirect-inlining")
//#pragma GCC optimize("-fhoist-adjacent-loads")
//#pragma GCC optimize("-frerun-cse-after-loop")
//#pragma GCC optimize("inline-small-functions")
//#pragma GCC optimize("-finline-small-functions")
//#pragma GCC optimize("-ftree-switch-conversion")
//#pragma GCC optimize("-foptimize-sibling-calls")
//#pragma GCC optimize("-fexpensive-optimizations")
//#pragma GCC optimize("-funsafe-loop-optimizations")
//#pragma GCC optimize("inline-functions-called-once")
//#pragma GCC optimize("-fdelete-null-pointer-checks")
//void write(int asd,bool ssd){
// if(asd==0)return;
// write(asd/10,true);
// putchar(asd%10^'0');
//}
//int read(){
// int x=0,f=1;
// char ch=getchar();
// while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
// return x*f;
//}
using namespace std;
const int maxn=100005;
int n,m;
int ans[maxn<<2],lazy[maxn<<2],a[maxn];
int ls(int qqq){
return qqq<<1;
}
int rs(int qqq){
return qqq<<1|1;
}
void pushup(int qqq){
ans[qqq]=ans[ls(qqq)]+ans[rs(qqq)];
}
void build(int qqq,int l,int r){
lazy[qqq]=0;
if(l==r){
ans[qqq]=a[l];
return;
}
int mid=(l+r)>>1;
build(ls(qqq),l,mid);
build(rs(qqq),mid+1,r);
pushup(qqq);
}
void tagger(int qqq,int l,int r,int kkk){
lazy[qqq]+=kkk;
ans[qqq]+=kkk*(r-l+1);
}
void pushdown(int qqq,int l,int r){
int mid=(l+r)>>1;
tagger(ls(qqq),l,mid,lazy[qqq]);
tagger(rs(qqq),mid+1,r,lazy[qqq]);
lazy[qqq]=0;
}
void upd(int qqq,int ul,int ur,int l,int r,int kkk){
if(ul<=l&&ur>=r){
tagger(qqq,l,r,kkk);
return;
}
pushdown(qqq,l,r);
int mid=(l+r)>>1;
upd(ls(qqq),ul,ur,l,mid,kkk);
upd(rs(qqq),ul,ur,mid+1,r,kkk);
pushup(qqq);
}
int que(int qqq,int ql,int qr,int l,int r){
int res=0;
if(ql<=l&&r<=qr){
return ans[qqq];
}
pushdown(qqq,l,r);
int mid=(l+r)>>1;
res+=que(ls(qqq),ql,qr,l,mid);
res+=que(rs(qqq),ql,qr,mid+1,r);
return res;
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(int i=0;i<m;i++){
int qwq;
cin>>qwq;
if(qwq==1){
int x,y,k;
cin>>x>>y>>k;
upd(1,x,y,1,n,k);
}else{
int x,y;
cin>>x>>y;
cout<<que(1,x,y,1,n);
}
}
return 0;
}