文件详细信息

下载本文件

本文件的大小为 831 字节。

#include<cstdio>
#define lowbit(x) (x&-x)
inline int read(){
	bool flag=true;
	int ch=getchar(),num=0;
	while(ch<48||ch>57){
		if(ch=='-')flag=false;
		ch=getchar();
	}
	while(ch>=48&&ch<=57)num=(num<<3)+(num<<1)+(ch^48),ch=getchar();
	return flag?num:-num;
}
const int maxn=1000005;
int n,q,op,l,r,x,now;
long long t1[maxn],t2[maxn];
void add(int u,int x){
	long long val=(long long)u*x;
	while(u<=n)t1[u]+=x,t2[u]+=val,u+=lowbit(u);
}
long long sum(long long*t,int u){
	long long ans=0;
	while(u)ans+=t[u],u-=lowbit(u);
	return ans;
}
int main(){
	n=read(),q=read();
	for(int i=1;i<=n;i++)now=read(),add(i,now),add(i+1,-now);
	while(q--){
		op=read(),l=read(),r=read();
		if(op==1){
			x=read();
			add(l,x),add(r+1,-x);
		}else printf("%lld\n",(r+1ll)*sum(t1,r)-(long long)l*sum(t1,l-1)-(sum(t2,r)-sum(t2,l-1)));
	}
	return 0;
}