玄关一枚
#include<bits/stdc++.h>
using namespace std;
typedef int intt;
#define int long long
long long n,m;
long long a[5000000],b[5000000],c1[5000000],c2[5000000];
long long lb(long long x){
return x&(-x);
}
long long updata(long long x,long long k){
for(long long i=x;i<=n;i+=lb(i)){
c1[i]+=k;
}
}
int updata1(int x,int k){
for(int i=x;i<=n;i+=lb(i)){
c2[i]+=k;
}
}
int sum(int x){
int ans=0;
for(int i=x;i>0;i-=lb(i)){
ans+=c1[i];
}
return ans;
}
int sum1(int x){
int ans=0;
for(int i=x;i>0;i-=lb(i)){
ans+=c2[i];
}
return ans;
}
intt main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i]-a[i-1];
updata(i,b[i]);
updata1(i,i*b[i]);
}
for(int i=1;i<=n;i++){
int t,x,y,k;
cin>>t>>x>>y;
if(t==1){
cin>>k;
updata(x,k);
updata(y+1,-k);
updata1(x,x*k);
updata1(y+1,-((y+1)*k));
}
else{
cout<<((y+1)*sum(y)-sum1(y))-((x-1+1)*sum((x-1))-sum1((x-1)))<<endl;
}
}
return 0;
}
全部RE了