// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll,ll>
#define fi first
#define se second
const int maxn = 3e5 + 5;
ll a[maxn];
pii dp[maxn][2];
int main() {
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);cout.tie(NULL);
ll n,k;
cin >> n >> k;
for (int i = 1;i<=n;i++){
cin >> a[i];
}
ll s = 0;
ll l = 0, r = 1e18;
while (l <= r){
ll m = (l+r) /2;
cerr << m << endl;
dp[1][0] = {0,0};
dp[1][1] = {a[1]-m,1};
for (int i = 2;i<=n;i++){
dp[i][0] = max(dp[i-1][0],dp[i-1][1]);
dp[i][1] = max(make_pair(dp[i-1][0].first - m + a[i], dp[i-1][0].second+1),
make_pair(dp[i-1][1].first + a[i], dp[i-1][1].second));
}
pii ans = max(dp[n][0],dp[n][1]);
if (ans.second >= k){
s = ans.first + m * k;
l = m+1;
}
else r = m - 1;
}
cout << s;
}
| # | 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... |