#include <bits/stdc++.h>
using namespace std;
int n, k;
pair<long long, long long> sybau(long long lambda, const vector<int>& a){
vector<vector<pair<long long, long long>>> dp(n, vector<pair<long long, long long>>(2));
dp[0][0] = {0, 0};
dp[0][1] = {a[0] - lambda, 1};
for(int i = 1; i < n; ++i){
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
pair<long long, long long> op1 = {dp[i - 1][0].first + a[i] - lambda, dp[i - 1][0].second + 1};
pair<long long, long long> op2 = {dp[i - 1][1].first + a[i], dp[i - 1][1].second};
dp[i][1] = max(op1, op2);
}
return max(dp[n - 1][0], dp[n - 1][1]);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> k;
vector<int> a(n);
for(int& x : a) cin >> x;
long long l = 0, r = 1e18, m;
while(l < r){
m = (l + r + 1) / 2;
if(sybau(m, a).second >= k) l = m;
else r = m - 1;
}
auto ans = sybau(l, a);
cout << ans.first + l * k << '\n';
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... |