开不下俩数组
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int f[6001][6001];
int maxX,maxY;//矩形边界
void prefixSum(){
for(int x=2;x<=maxX;x++){
int tmpY=1;
f[x][tmpY]=f[x-1][tmpY]+f[x][tmpY];
}
for(int y=2;y<=maxY;y++){
int tmpX=1;
f[tmpX][y]=f[tmpX][y-1]+f[tmpX][y];
}
for(int x=2;x<=maxX;x++){
for(int y=2;y<=maxY;y++){
f[x][y]=f[x-1][y]+f[x][y-1]-f[x-1][y-1]+f[x][y];
}
}
}
int r;
int maxx=-1;
void solve(){
for(int x=1;x<=maxX;x++){
for(int y=1;y<=maxY;y++){
if(x>=r&&y>=r)
maxx=max(maxx,f[x][y]-f[x-r][y]-f[x][y-r]+f[x-r][y-r]);
else if(x<r&&y>=r){
maxx=max(maxx,f[x][y]-f[x][y-r]);
}else if(x>=r&&y<r){
maxx=max(maxx,f[x][y]-f[x-r][y]);
}else if(x<r&&y<r){
maxx=max(maxx,f[x][y]);
}
}
}
}
int main(){
maxX=maxY=-1;
memset(f,0,sizeof(f));
int n;//目标数 边长
scanf("%d%d",&n,&r);
for(int i=1;i<=n;i++){
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
x++,y++;
f[x][y]=w;
maxX=max(x,maxX);
maxY=max(y,maxY);
}
prefixSum();
solve();
cout<<maxx<<endl;
return 0;
}