预处理二维前缀和,枚举判断最大
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#define inf 0x3f3f3f3f
#define N 5010
using namespace std;
int s[N+10][N+10],l,r,n,m,mx;
inline int read() {
int ret=0;char ch=getchar();
for (;!isdigit(ch);ch=getchar());
for (;isdigit(ch);ch=getchar()) ret=ret*10+ch-'0';
return ret;
}
int main() {
n=read();r=read();
for (int i=1;i<=n;i++) {
int x=read(),y=read(),z=read();
s[x+1][y+1]=z;
}
for (int i=1;i<=N;i++)
for (int j=1;j<=N;j++) s[i][j]+=s[i][j-1]+s[i-1][j]-s[i-1][j-1];
for (int i=r;i<=N;i++)
for (int j=r;j<=N;j++) mx=max(mx,s[i][j]+s[i-r][j-r]-s[i-r][j]-s[i][j-r]);
printf("%d\n",mx);
return 0;
}