二维前缀和
记录一下,开了两个数组a,s时,MLE了,把其中一个数组删掉,只用一个数组就AC了
所以能少开就少开吧
#include<iostream>
#include<cstdio>
using namespace std;
const int N=5005;
int s[N][N];
long long ans;
int r;
long long sum(int i,int j)
{
return s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r];
}
int main()
{
int n;cin>>n>>r;
while(n--)
{
int x,y,w;cin>>x>>y>>w;
s[x+1][y+1]+=w;
}
for(int i=1;i<=5000;++i)
{
for(int j=1;j<=5000;++j)
{
s[i][j]=s[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
}
}
for(int i=r;i<=5000;++i)
{
for(int j=r;j<=5000;++j)
{
long long t=sum(i,j);
ans=max(ans,t);
}
}
cout<<ans;
return 0;
}