#include<iostream>
#include<vector>
using namespace std;
#define int long long
const int N=3e5+5;
int n, k;
int a[N];
pair<int, int> lambda(int el){
pair<int, int> dp0[n+1], dp1[n+1];
dp0[0]={0, 0};
dp1[0]={-1e18, 0};
for(int i=1; i<=n; i++){
dp1[i]=max(make_pair(dp0[i-1].first+a[i]-el, dp0[i-1].second+1), make_pair(dp1[i-1].first+a[i], dp1[i-1].second));
dp0[i]=max(dp1[i], dp0[i-1]);
}
return max(dp0[n], dp1[n]);
}
int32_t main(){
cin>>n>>k;
for(int i=1; i<=n; i++){
cin>>a[i];
}
int l=0, r=1e15;
while(l<r){
int el=(l+r+1)/2;
if(lambda(el).second>=k){
l=el;
}
else r=el-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... |