This documentation is automatically generated by online-judge-tools/verification-helper
#define PROBLEM "http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0516"
#include "src/template.hpp"
#include "src/cumulative_sum.hpp"
int main() {
while (1) {
ll n, k;
cin >> n >> k;
if (n == 0 and k == 0) return 0;
vl a(n);
rep(i, n) {
cin >> a[i];
}
CumulativeSum<ll> cs(a);
cs.build();
ll ans = -1e4;
for (ll i = 0; i+k-1 < n; i++) {
cmax(ans, cs.sum(i, i+k-1));
}
cout << ans << el;
}
}
#line 1 "test/cumulative_sum.test.cpp"
#define PROBLEM "http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0516"
#line 2 "src/template.hpp"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pl = pair<ll, ll>;
using vl = vector<ll>;
#define rep(i, n) for(ll i = 0; i < (ll)n; i++)
#define rep3(i, l, r) for(ll i = l; i < (ll)r; i++)
#define per(i, n) for(ll i = (ll)n-1; i >= 0; i--)
#define per3(i, l, r) for(ll i = (ll)r-1; i >= (ll)l; i--)
#define all(v) begin(v), end(v)
#define rall(v) rbegin(v), rend(v)
template<class T, class U> inline void cmax(T &a, U b) { if (a < b) a = b; }
template<class T, class U> inline void cmin(T &a, U b) { if (a > b) a = b; }
constexpr char el = '\n';
template<class T, class U> ostream &operator<<(ostream &os, const pair<T, U> &p) { os << p.first << " " << p.second; return os; }
template<class T, class U> istream &operator>>(istream &is, pair<T, U> &p) { is >> p.first >> p.second; return is; }
template<class T> ostream &operator<<(ostream &os, const vector<T> &v) { rep(i, v.size()) os << v[i] << (i+1 != (ll)v.size() ? " " : ""); return os; }
template<class T> istream &operator>>(istream &is, vector<T> &v) { for(T &i : v) is >> i; return is; }
struct IoSetup {
IoSetup() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(15); cerr << fixed << setprecision(15); }
} io_setup;
#line 3 "src/cumulative_sum.hpp"
template<class T>
struct CumulativeSum {
vector<T> v;
CumulativeSum(size_t n) : v(n+1) {};
CumulativeSum(vector<T> v_) {
v.resize(v_.size()+1);
rep(i, v_.size())
v[i+1] = v_[i];
};
void add(size_t i, T x) {
v[i+1] += x;
}
// O(N)
void build() {
if (v.size() == 0) return;
rep(i, v.size()-1)
v[i+1] += v[i];
}
// O(1) sum [l, r]
T sum(size_t l, size_t r) const {
return l == 0 ? v[r+1] : v[r+1]-v[l];
}
// O(1) sum [0, r]
T sum(size_t r) const {
return v[r+1];
}
T& operator[](size_t i) {
return v[i];
}
const T& operator[](size_t i) const {
return v[i];
}
};
#line 5 "test/cumulative_sum.test.cpp"
int main() {
while (1) {
ll n, k;
cin >> n >> k;
if (n == 0 and k == 0) return 0;
vl a(n);
rep(i, n) {
cin >> a[i];
}
CumulativeSum<ll> cs(a);
cs.build();
ll ans = -1e4;
for (ll i = 0; i+k-1 < n; i++) {
cmax(ans, cs.sum(i, i+k-1));
}
cout << ans << el;
}
}