萌新刚学OI,求条/kel
查看原帖
萌新刚学OI,求条/kel
1198296
封禁用户楼主2024/5/29 13:26
#include<iostream>
using namespace std;
#define lowbit(x) x&(-x)
int n,m;
const int N=2050;
int c1[N][N],c2[N][N],c3[N][N],c4[N][N];
void update(int x,int y,int num){
	for(int i=x;i<=n;i+=lowbit(i)){
		for(int j=y;j<=m;j+=lowbit(j)){
			c1[i][j]+=num;
			c2[i][j]+=num*i;
			c3[i][j]+=num*j;
			c4[i][j]+=num*i*j;
		}
	}
	return ; 
}
int query(int x,int y){
	int ans=0;
	for(int i=x;i;i-=lowbit(i)){
		for(int j=y;j;j-=lowbit(j)){
			ans+=(x+1)*(y+1)*c1[i][j]-(y+1)*c2[i][j]-(x+1)*c3[i][j]+c4[i][j];
		}
	}
	return ans;
}
signed main(){
	char c;
	int x1,y1,x2,y2,z;
	while(cin>>c){
		if(c=='X'){
			cin>>n>>m; 
		}
		else if(c=='L'){
			cin>>x1>>y1>>x2>>y2>>z;
			update(x1,y1,z);
			update(x1,y2+1,-z);
			update(x2+1,y1,-z);
			update(x2+1,y2+1,z);
		}
		else{
			cin>>x1>>y1>>x2>>y2;
			cout<<query(x2,y2)-query(x2,y1-1)-query(x1-1,y2)+query(x1-1,y1-1)<<endl;
		}
	}
	return 0;
} 
2024/5/29 13:26
加载中...