二维前缀和搞搞就行了。
#include <bits/stdc++.h>
const int max_n=5000+5;
int N,M,Ans;
int sum[max_n][max_n];
inline int read()
{
register int x=0;
register char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
{
x=(x<<1)+(x<<3)+ch-‘0‘;
ch=getchar();
}
return x;
}
int main()
{
int x,y;
N=read(),M=read();
for(int i=1;i<=N;++i)
x=read()+1,y=read()+1,sum[x][y]=read();
for(int i=1;i<=5000;++i)
for(int j=1;j<=5000;++j)
sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
for(int i=M;i<=5000;++i)
for(int j=M;j<=5000;++j)
Ans=std::max(Ans,sum[i][j]-sum[i][j-M]-sum[i-M][j]+sum[i-M][j-M]);
printf("%d\n",Ans);
return 0;
}