// 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];
ll n,k;
pii dp[maxn][2];
pii calc(int m){
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));
}
return max(dp[n][0],dp[n][1]);
}
int main() {
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);cout.tie(NULL);
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;
pii ans = calc(m);
if (ans.second >= k){
s = m;
l = m+1;
}
else r = m - 1;
// cout << m << " " << ans.first << " " << ans.second << endl;
/*
*/
}
cout << calc(s).first + k*s << endl;
}
| # | 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... |