#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
int N, K;
cin >> N >> K;
vector<ll> a(N + 1);
for (int i = 1; i <= N; ++i) {
cin >> a[i];
}
ll left = 0, right = 1e10;
ll res = 0;
auto chmax = [&](array<ll, 2>& x, array<ll, 2> y, ll delta) -> void {
if (delta <= 0) {
y[0] += delta;
y[1] += 1;
}
x = max(x, y);
};
auto calc = [&](ll now) -> array<ll, 2> {
vector<vector<array<ll, 2>>> dp(N + 1, vector<array<ll, 2>>(2, {0, 0}));
for (int i = 1; i <= N; ++i) {
dp[i][0] = dp[i - 1][0];
chmax(dp[i][0], dp[i - 1][1], -now);
dp[i][1] = dp[i - 1][0];
dp[i][1][0] += a[i];
auto ndp = dp[i - 1][1];
ndp[0] += a[i];
chmax(dp[i][1], ndp, +1);
}
auto res = dp[N][0];
chmax(res, dp[N][1], -now);
return res;
};
while (left <= right) {
ll mid = (left + right) / 2;
if (calc(mid)[1] > K) {
left = mid + 1;
} else {
res = mid;
right = mid - 1;
}
}
cout << calc(res)[0] + 1LL * res * K << "\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |