TLE on 8,9,10
玄关
#include<bits/stdc++.h>
#define endl '\n'
#define lowbit(x) (x)&(-x)
#define int long long
using namespace std;
typedef double db;
typedef long long ll;
typedef __int128 III;
const db eqs=1e-6;
const int inf=1e9;
void ll_cmax(ll &a,ll b){a=a>b?a:b;}
void ll_cmin(ll &a,ll b){a=a<b?a:b;}
void int_cmax(int &a,int b){a=a>b?a:b;}
void int_cmin(int &a,int b){a=a<b?a:b;}
bool db_eq(db a,db b){return fabs(a-b)<eqs;}
bool number(char ch){return ch>='0' && ch<='9';}
bool lowerchar(char ch){return ch>='a' && ch<='z';}
int sqlong(int n){int sq=sqrt(n)+1;return min(sq,n);}
vector<int>a;
int n,m;
namespace SGT
{
constexpr int rt=1;
struct T
{
ll sum=0,tag=0;
}t0;
vector<T>t;
int n;
T merge(T x,T y)
{
T z;
z.sum=x.sum+y.sum;
return z;
}
void push_down(int p,int l,int r)
{
int mid=(l+r)/2;
t[p*2].tag+=t[p].tag;t[p*2+1].tag+=t[p].tag;
t[p*2].sum+=(mid-l+1)*t[p].tag;
t[p*2+1].sum+=(r-mid)*t[p].tag;
t[p].tag=0;
}
void build(vector<int>a,int l=0,int r=n-1,int x=rt)
{
if(l==r) {t[x].sum=a[l];return;}
int mid=(l+r)/2;
build(a,l,mid,2*x);
build(a,mid+1,r,2*x+1);
t[x]=merge(t[2*x],t[2*x+1]);
}
void sgt(vector<int>a)
{
n=a.size();
t.resize(n<<2);
build(a);
}
void modify(int al,int ar,ll num,int l=0,int r=n-1,int x=rt)
{
if(l>ar || r<al) return ;
if(l>=al && r<=ar) {t[x].tag+=num;t[x].sum+=num*(r-l+1);return ;}
push_down(x,l,r);
// cout<<"ok";
int mid=(l+r)/2;
modify(al,ar,num,l,mid,x*2);
modify(al,ar,num,mid+1,r,x*2+1);
t[x]=merge(t[x*2],t[x*2+1]);
}
T query(int al,int ar,int l=0,int r=n-1,int x=rt)
{
// cout<<l<<" "<<r<<endl;
if(ar<l || al>r) return t0;
if(ar>=r && al<=l) return t[x];
push_down(x,l,r);
int mid=(l+r)/2;
return merge(query(al,ar,l,mid,x*2),query(al,ar,mid+1,r,x*2+1));
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
ll x;
for(int i=1;i<=n;i++) cin>>x,a.push_back(x);
SGT::sgt(a);
int id,l,r;
// ll x;
while(m--)
{
cin>>id;
if(id==1)
{
cin>>l>>r>>x;
SGT::modify(l-1,r-1,x);
}
else
{
cin>>l>>r;
cout<<SGT::query(l-1,r-1).sum<<endl;
}
}
return 0;
}
/*
3 3 7 4 0
3
*/