AcWing 99. 激光炸弹前缀和最大范围优化版本
原题链接
简单
作者:
天真的和感伤的做梦家
,
2025-03-22 17:42:54
·新疆
,
所有人可见
,
阅读 1
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5010;
int n, r;
int s[N][N];
int num;
int big;
int main(){
cin >> n >> r;
if(r == 0){
cout << 0;
return 0;
}
while(n--){
int x, y, w;
cin >> x >> y >> w;
x++; y++;
num = max({x, y, num});
s[x][y] += w;
}
for(int i = 1; i <= num; i++){
for(int j = 1; j <= num; j++){
s[i][j] += s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1];
}
}
if(r <= num){
for(int i = r; i <= num; i++){
for(int j = r; j <= num; j++){
int x2 = i, y2 = j;
int x1 = x2 - r + 1, y1 = y2 - r + 1;
int current = s[x2][y2]
- s[x2][y1 - 1]
- s[x1 - 1][y2]
+ s[x1 - 1][y1 - 1];
big = max(big, current);
}
}
cout << big;
}
else {
cout << s[num][num];
}
return 0;
}