前缀和 算最大值的时候以方块的右下角进行枚举


using namespace std;

const int N=5010;
int s[N][N],n,r,x,y,v,ans=0;

int main()
{
	cin >> n >> r;
	while (n--) {
		cin >> x >> y >> v;
		s[++x][++y]=v;
	}
	for (int i=1;i<N;i++) for (int j=1;j<N;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<N;i++) for (int j=r;j<N;j++) ans=max(ans,s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r]);
	cout << ans;
	
	return 0;
}