跑不动,求调
查看原帖
跑不动,求调
1003946
2023TYK楼主2024/5/3 17:48
#include <bits/stdc++.h>
using namespace std;
int n,m,a,b,x1,x2,yl,y2,num;
char c;
struct sb
{
	int tree[4514][4514];
	int lowbit(int k)
	{
		return k & -k;
	}
	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))
				tree[i][j]+=num;
	}
	int query(int x,int y) 
	{
		int ans=0;
		for(int i=x; i>=1; i-=lowbit(i))
			for(int j=y; j>=1; j-=lowbit(j))
				ans+=tree[i][j];
		return ans;	
	}
}A,Ai,Aj,Aij;

int Ans(int x,int y)
{
	return A.query(x,y)*(x*y+x+y+1)-
		   Ai.query(x,y)*(y+1)-
		   Aj.query(x,y)*(x+1)+
		   Aij.query(x,y);
}

void Add(int x,int y,int num)
{
	A.add(x,y,num);
	Ai.add(x,y,num*x);
	Aj.add(x,y,num*y);
	Aij.add(x,y,num*x*y);
}
int main()
{
	cin>>c>>n>>m;
	while(cin>>c)
	{cin>>x1>>x2>>yl>>y2;
		if(c=='L')
		{
			cin>>num;
			Add(x1,yl,num);
			Add(x1,y2+1,-num);
			Add(x2+1,yl,-num);
			Add(x2+1,y2+1,num);
		}else
		{
			cout<<Ans(x2,y2)-Ans(x1-1,y2)-Ans(x2,yl-1)+Ans(x1-1,yl-1)<<endl;
		}
	}
	return 0;
}
2024/5/3 17:48
加载中...