版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
B 前缀和
题目
知识点
前缀和是一种较为常见的预处理方式,能大大降低查询的时间复杂度。我们可以简单理解为“数列的前 n 项的和”。
对于一个给定的序列A,其前缀和S的定义如下:
预处理出来前缀和序列S后我们就可以 的查询区间和
练习题
给定一个长度为n的整数序列A,问连续k个整数的和的最大值。
输入
第一行两个正整数
第二行 个整数,表示序列
输出
一行一个整数
输入样例
5 3
2 5 -4 10 3
输出样例
11
思路
预处理一下前缀和,然后遍历一遍求最大值
代码
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
const int ms = 1e6 + 10;
ll sum[ms];
inline void init_cin()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
}
int main()
{
init_cin();
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; ++i)
{
cin >> sum[i];
sum[i] += sum[i - 1];
}
ll res = sum[k];
for (int i = 2; i + k - 1 <= n; ++i)
{
res = max(res, sum[i + k - 1] - sum[i - 1]);
}
cout << res << "\n";
return 0;
}