知识点:前缀和
这个题是二维前缀和的运用,前缀和不管是一维的还是二维的,都有两个基本操作,一个输入的时候递推求前缀和,一个是用O1来查询我们想要的区间的信息,
这个题有两个坑点,一个是它是坐标从0开始,所以我们输入的时候可以坐标加一,一个是我们的信息要和前缀和用一个数组储存,信息后面就不要了,因为空间要求比较紧,这两个坑点,保证了它还是有黄题的,
#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 5;
int a[N][N];
int main() {
int n, m;
cin >> n >> m;
while (n--) {
int x, y, z;
cin >> x >> y >> z;
a[x + 1][y + 1] = z;
}
for (int i = 1; i <= 5001; i++) {
for (int j = 1; j <= 5001; j++) {
a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
}
}
int ans = -1;
for (int i = 0; i <= 5001 - m; i++) {
for (int j = 0; j <= 5001 - m; j++) {
ans = max(ans, a[i + m][j + m] - a[i][j + m] - a[i + m][j] + a[i][j]);
}
}
cout << ans;
return 0;
}