#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#define INF 1e9
using namespace std;
typedef long long ll;
const ll MAXN = 100005;
pair<ll, ll>f(ll mid, vector<ll>& v, ll n) {
vector<vector<pair<ll, ll>>>dp(n, vector<pair<ll, ll>>(2));
dp[0][0] = { 0, 0 };
dp[0][1] = { v[0] - mid, 1 };
for (int i = 1; i < n; i++) {
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
pair<ll, ll>x = { dp[i - 1][0].first + v[i] - mid, dp[i - 1][0].second + 1 };
pair<ll, ll>y = { dp[i - 1][1].first + v[i], dp[i - 1][1].second};
dp[i][1] = max(x, y);
}
return max(dp[n - 1][0], dp[n - 1][1]);
}
void solve()
{
int n, k; cin >> n >> k;
vector<ll>v(n);
for (int i = 0; i < n; i++)cin >> v[i];
ll lo = 0; ll hi = 1e15;
while (lo < hi) {
ll mid = (lo + hi + 1) / 2;
if (f(mid, v, n).second >= k)lo = mid;
else hi = mid - 1;
}
pair<ll, ll>ans = f(lo, v, n);
cout << ans.first + lo * k << "\n";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
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... |