MLE求调,81pts,MLE#10#11
查看原帖
MLE求调,81pts,MLE#10#11
1269609
yiwugougou楼主2025/1/8 09:31

rt

#include<bits/stdc++.h>
#define int long long 
using namespace std;
int c1[2049][2049],c2[2049][2049],c3[2049][2049],c4[2049][2049];
int n,m,q;
int lowbit(int x){
	return x&-x;
}
void add(int x,int y,int k){
	for(int i=x;i<=n;i+=lowbit(i)){
		for(int j=y;j<=m;j+=lowbit(j)){
			c1[i][j]+=k;
			c2[i][j]+=k*x;
			c3[i][j]+=k*y;
			c4[i][j]+=k*x*y;
		}
	}
}
int getsum(int x,int y){
	int ans=0;
	for(int i=x;i>0;i-=lowbit(i)){
		for(int j=y;j>0;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;
}
int answer(int x,int y,int x2,int y2){
	return getsum(x2,y2)-getsum(x-1,y2)-getsum(x2,y-1)+getsum(x-1,y-1);
}
signed main(){
	char ADFSDAIFJDSAIFJIPSAD,op;
	cin>>ADFSDAIFJDSAIFJIPSAD>>n>>m;
	while(cin>>op){
		if(op=='L'){
			int x1,y1,x2,y2,k;
			cin>>x1>>y1>>x2>>y2>>k;
			add(x1,y1,k);
			add(x1,y2+1,-k);
			add(x2+1,y1,-k);
			add(x2+1,y2+1,k);
		}else{
			int x1,y1,x2,y2;	
			cin>>x1>>y1>>x2>>y2;
			cout<<answer(x1,y1,x2,y2)<<endl;
		}
	}
	return 0;
}
2025/1/8 09:31
加载中...