[AcWing] 1922. 懒惰的牛(C++实现)前缀和
1. 题目
2. 读题(需要重点注意的东西)
思路:
思路一:前缀和
遍历一遍,用前缀和求出区间[i-k,i+k]内的最大值即可
3. 解法
-----------------------------------------------解法:前缀和----------------------------------------------
#include<iostream>
using namespace std;
const int N = 1e6+10;
int q[N];
int main(){
int n,k;
cin >> n >> k;
while(n--){
int g,x;
cin >> g >> x;
q[x] = g;
}
// 构建前缀和
for(int i = 1;i < N;i++) q[i] = q[i-1] + q[i];
int res = -1;
for(int i = 0;i < N;i++){
int left = max(0,i-k);
int right = min(i+k,N-1);
// 前缀和求最大值
res = max(res,q[right] - q[left - 1]);
}
cout << res << endl;
return 0;
}
可能存在的问题
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
- 前缀和