二维前缀和的基础应用
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=5000+7;
int sm[M][M];
int main()
{
int n,R;
scanf("%d%d",&n,&R);
for(int i=1;i<=n;i++)
{
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
sm[x+1][y+1]=w;
}
for(int i=1;i<=5001;i++)for(int j=1;j<=5001;j++)sm[i][j]+=sm[i][j-1];
for(int i=1;i<=5001;i++)for(int j=1;j<=5001;j++)sm[j][i]+=sm[j-1][i];
int ma=0;
for(int i=1;i<=5001;i++)
for(int j=1;j<=5001;j++)
{
int x=max(i-R,0),y=max(j-R,0);
ma=max(ma,sm[i][j]-sm[x][j]-sm[i][y]+sm[x][y]);
// printf("%d %d %d\n",i,j,ma);
}
printf("%d\n",ma);
return 0;
}