#include<bits/stdc++.h>
#define newl '\n'
const int N = 3e5 + 10;
const int V = 1e7 + 10;
const long long INF = 1e18;
const long long M = 1e9 + 7;
int a[N + 1],n,k;
void readData(){
std::cin >> n >> k;
for(int i = 1;i <= n;++i){
std::cin >> a[i];
}
}
std::pair<long long,int> dp(long long cost){
std::pair<long long,long long> f[2]{{0,0},{-INF,0}};
for(int i = 1;i <= n;++i){
std::pair<long long,long long> nf[2];
nf[0] = std::max(f[0],f[1]);
nf[1] = std::max<std::pair<long long,int>>({f[0].first + a[i] - cost,f[0].second + 1},{f[1].first + a[i],f[1].second});
f[0] = nf[0];
f[1] = nf[1];
}
return std::max(f[0],f[1]);
}
long long solve(){
long long lo = 0,hi = 1e14,ans = 0;
while(lo <= hi){
long long mid = (lo + hi) / 2;
if(dp(mid).second >= k){
ans = mid;
lo = mid + 1;
}else{
hi = mid - 1;
}
}
return dp(ans).first + k * ans;
}
int main(){
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);std::cout.tie(nullptr);
readData();
// std::cout << dp(7).first;
std::cout << solve();
return 0;
}
# | 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... |