#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 5010;
int s[N][N];
int n, m;
int main()
{
int cnt, r;
cin >> cnt >> r;
r = min(r, 5001);
n = m = r;
while (cnt --)
{
int x, y, w;
cin >> x >> y >> w;
x ++, y ++;
n = max(n, x), m = max(m, y);
s[x][y] += w;
}
// 预处理前缀和
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= m; ++ j)
s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1]; // s[i][j]是格点上的值
int res = 0;
// 枚举所有边长是r的矩形,枚举(i, j)为右下角
for (int i = r; i <= n; ++ i)
for (int j = r; j <= m; ++ j)
res = max(res, s[i][j] - s[i - r][j] - s[i][j - r] + s[i - r][j - r]);
cout << res << endl;
return 0;
}
Acwing 99. 激光炸弹
最新推荐文章于 2024-06-24 11:22:30 发布