#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define sz(x) (int)(x).size()
void solve() {
int n, k;
cin >> n >> k;
vector<ll> a(n);
for (auto &x : a) cin >> x;
auto chk = [&](ll lam) {
vector dp(n + 1, vector<pair<ll, int>>(2, {-1E18, -1E18}));
dp[0][0] = {0, 0};
for (int i = 0; i < n; i++) {
dp[i + 1][0] = max(dp[i][0], dp[i][1]);
dp[i + 1][1] = max(
make_pair(dp[i][1].first + a[i], dp[i][1].second),
make_pair(dp[i][0].first + a[i] - lam, dp[i][0].second + 1)
);
}
return max(dp[n][0], dp[n][1]);
};
ll l = 0, r = 1E18;
while (l < r) {
ll mid = (l + r + 1) / 2;
auto [_, cnt] = chk(mid);
if (cnt >= k) {
l = mid;
} else {
r = mid - 1;
}
}
cout << chk(l).first + l * k << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
| # | 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... |