#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 3e5+5;
int n, k, a[maxN];
pair<int,int>cal(int lambda)
{
pair<int,int>dp[n+5][2];
dp[1][0] = {0, 0};
dp[1][1] = {a[1] - lambda, 1};
for(int i=2; i<=n; i+=1)
{
dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
pair<int,int>tmp1 = {dp[i-1][0].fi + a[i] - lambda, dp[i-1][0].se+1};
pair<int,int>tmp2 = {dp[i-1][1].fi + a[i], dp[i-1][1].se};
dp[i][1] = max(tmp1, tmp2);
}
return max(dp[n][0], dp[n][1]);
}
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>k;
for(int i=1; i<=n; i+=1) cin>>a[i];
int l = 0, r = 1e18, t = 0;
while(r - l >= 0)
{
int mid = (l+r)>>1;
if(cal(mid).se >= k) l = mid+1, t = mid;
else r = mid-1;
}
cout<<cal(t).fi+t*k<<'\n';
}
# | 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... |