#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 333333;
int n, k, a[N];
pair<int, int> dp[N][2];
pair<int, int> solve(int x){
dp[1][0] = {0, 0};
dp[1][1] = {a[1] - x, 1};
for(int i = 2;i<=n;i++){
dp[i][0] = dp[i][1] = {-4e18, 0};
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
dp[i][1] = max(make_pair(dp[i - 1][1].first + a[i], dp[i - 1][1].second), make_pair(dp[i - 1][0].first + a[i] - x, dp[i - 1][0].second + 1));
}
return max(dp[n][0], dp[n][1]);
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> k;
for(int i = 1;i<=n;i++) cin >> a[i];
int l = 0, r = 1e18, ans = -1;
while(l <= r){
int md = (l + r) / 2;
if(solve(md).second >= k){
ans = md;
l = md + 1;
}else{
r = md - 1;
}
}
cout << solve(ans).first + k * ans;
}
| # | 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... |