Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37546 | Sakuzyh | 【S】T1 | C++ | 解答错误 | 5 | 181 MS | 2996 KB | 1139 | 2025-04-06 14:43:04 |
// Author: Aquizahv #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1e5 + 5; int n, k, a[N]; ll sum[N], pre[N], suf[N]; void solve() { scanf("%d%d", &n, &k); for (int i = 1; i <= n; i++) { scanf("%d", a + i); sum[i] = sum[i - 1] + a[i]; } memset(pre, 0, sizeof(pre)); memset(suf, 0, sizeof(suf)); for (int i = 1; i <= n; i++) pre[i] = max(pre[i - 1], pre[i - 1] + a[i]); for (int i = n; i >= 1; i--) suf[i] = max(suf[i + 1], suf[i + 1] + a[i]); ll mx = 0; // int mxi = -1; for (int i = 1; i + k - 1 <= n; i++) mx = max(mx, pre[i - 1] + (sum[i + k - 1] - sum[i - 1]) + suf[i + k]); // cout << mxi << endl; // if (mxi != -1) // { // for (int i = mxi - 1; i >= 1; i--) // a[i] = min(0, a[i]); // for (int i = mxi + k; i <= n; i++) // a[i] = min(0, a[i]); // } printf("%lld\n", mx); } int main() { int T; cin >> T; while (T--) solve(); return 0; } /* k = 4 0 0 0 1 0 0 0 0 1 1 1 0 */