#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fs first
#define sc second
#define pb push_back
void solve() {
int n,k;
cin>>n>>k;
ll a[n+1];
for(int i=1;i<=n;i++)cin>>a[i];
auto calc=[&](ll x){
pll dp[n+1][2];
dp[0][0]={0,0};
dp[0][1]={-1e18,0};
for(int i=1;i<=n;i++){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
dp[i][1]=max(make_pair(dp[i-1][0].fs-x,dp[i-1][0].sc+1),dp[i-1][1]);
dp[i][1].fs+=a[i];
}
return max(dp[n][0],dp[n][1]);
};
ll l=0,r=1e18;
while(l<r){
ll m=(l+r+1)/2;
if(calc(m).sc>=k)l=m;
else r=m-1;
}
cout<<calc(l).fs+l*k<<'\n';
}
int main() {
#ifdef FPO
freopen("in","r",stdin);
freopen("out","w",stdout);
#endif
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
solve();
}
# | 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... |