#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+5;
int A[N];
int n;
pair<int,int> lambda(int lmb)
{
pair<int,int> dp[n][2];
dp[0][0]={0,0};
dp[0][1]={A[0]-lmb,1};
for(int a=1;a<n;a++){
dp[a][0]=max(dp[a-1][0],dp[a-1][1]);
dp[a][1]=max(make_pair(dp[a-1][0].first+A[a]-lmb,dp[a-1][0].second+1),make_pair(dp[a-1][1].first+A[a],dp[a-1][1].second));
}
return max(dp[n-1][0],dp[n-1][1]);
}
signed main()
{
int k;
cin>>n>>k;
for(int a=0;a<n;a++){
cin>>A[a];
}
int l=0,r=1e18;
while(l<r){
int mid=(l+r+1)/2;
if(lambda(mid).second>=k) l=mid;
else r=mid-1;
}
cout<<lambda(l).first+l*k;
}
# | 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... |