文件详细信息

下载本文件

本文件的大小为 1121 字节。

#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;
		else if(ch==-1)return -1;
		ch=getchar();
	}
	while(ch>=48&&ch<=57)num=(num<<3)+(num<<1)+(ch^48),ch=getchar();
	return flag?num:-num;
}
const int maxn=2050;
int n,m,op,a,b,c,d,x;
long long t1[maxn][maxn],t2[maxn][maxn],t3[maxn][maxn],t4[maxn][maxn];
void add(int x,int y,int v){
	long long v1=(long long)x*v,v2=(long long)y*v,v3=(long long)x*y*v;
	while(x<=n){
		for(int i=y;i<=m;i+=lowbit(i)){
			t1[x][i]+=v;
			t2[x][i]+=v1;
			t3[x][i]+=v2;
			t4[x][i]+=v3;
		}
		x+=lowbit(x);
	}
}
long long sum(int x,int y){
	long long ans=0;
	for(int i=x;i;i-=lowbit(i))
		for(int j=y;j;j-=lowbit(j))
			ans+=(x+1)*(y+1)*t1[i][j]-(y+1)*t2[i][j]-(x+1)*t3[i][j]+t4[i][j];
	return ans;
}
int main(){
	n=read(),m=read();
	while(true){
		op=read(),a=read(),b=read(),c=read(),d=read();
		if(op==1){
			x=read();
			add(a,b,x),add(a,d+1,-x),add(c+1,b,-x),add(c+1,d+1,x);
		}else if(op==2){
			printf("%lld\n",sum(c,d)-sum(a-1,d)-sum(c,b-1)+sum(a-1,b-1));
		}else break;
	}
	return 0;
}