MLE,求助
查看原帖
MLE,求助
1068555
chen_yi_cheng楼主2024/1/22 08:15
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long cc1[2510][2510];
long long cc2[2510][2510];
long long cc3[2510][2510];
long long cc4[2510][2510];
long long lowbit(long long x)
{
	return x&(-x);
}
void add(long long a,long long b,long long delta)
{
	if(a<1||n<a||b<1||m<b)
	{
		return;
	}
    for(long long i=a;i<=n;i+=lowbit(i))
    {
        for(long long j=b;j<=m;j+=lowbit(j))
        {
        	cc1[i][j]+=delta;
        	cc2[i][j]+=delta*(a-1);
        	cc3[i][j]+=delta*(b-1);
        	cc4[i][j]+=delta*(a-1)*(b-1);
		}
    }
    return;
}
void gai(long long a,long long b,long long c,long long d,long long ad)
{
	add(a,b,ad);
	add(c+1,b,-ad);
	add(a,d+1,-ad);
	add(c+1,d+1,ad);
}
long long Sum(long long a,long long b)
{
	long long ans1=0,ans2=0,ans3=0,ans4=0;
	for(long long i=a;i>=1;i-=lowbit(i))
    {
        for(long long j=b;j>=1;j-=lowbit(j))
        {
        	ans1+=cc1[i][j];
        	ans2+=cc2[i][j];
        	ans3+=cc3[i][j];
        	ans4+=cc4[i][j];
		}
    }
    ans1*=a*b;
    return ans1-ans2*b-ans3*a+ans4;
}
int main()
{
	char t;
	cin>>t;
	cin>>n>>m;
	char op;
    while(cin>>op)
    {
    	if(op=='L')
    	{
    		long long a,b,c,d,delta;
    		cin>>a>>b>>c>>d>>delta;
    		gai(a,b,c,d,delta);
		}
		else
		{
			long long a,b,c,d;
			cin>>a>>b>>c>>d;
			cout<<Sum(c,d)-Sum(a-1,d)-Sum(c,b-1)+Sum(a-1,b-1)<<endl;
		}
	}
	return 0;
}
2024/1/22 08:15
加载中...