1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 3e5 + 50; int n, m, head, tail, a[maxn], q[maxn]; ll sum[maxn];
int main() { cin >> n >> m; ll ans = INT_MIN; for (int i = 1; i <= n; ++i) cin >> a[i], sum[i] = a[i] + sum[i - 1]; q[tail++] = 0; for (int i = 1; i <= n; ++i) { while (head < tail && q[head] < i - m) ++head; ans = max(ans, sum[i] - sum[q[head]]); while (head < tail && sum[q[tail - 1]] >= sum[i]) --tail; q[tail++] = i; } cout << ans; return 0; }
|