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;
}