#include "bits/stdc++.h"
using namespace std;
# define int long long
# define all(a) a.begin(), a.end()
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int n, k;
cin >> n >> k;
vector<int> a(n);
for(auto &i : a) cin >> i;
const int BORDER = 1e13, INF = 8e18;
int l = -1e13, r = 100;
vector<int> p(n + 1);
for(int i = 0; i < n; ++i){
p[i + 1] = p[i] + a[i];
}
auto check = [&](int x) ->pair<int, int>{
vector<vector<pair<int, int>>> dp(n + 1, vector<pair<int, int>>(2, {-INF, 0}));
dp[0][1] = {0, 0};
for(int i = 1; i <= n; ++i){
dp[i][0] = dp[i - 1][0];
dp[i][0].first += a[i - 1];
dp[i][1] = max(dp[i][0], dp[i - 1][1]);
dp[i][0] = max(dp[i][0], {dp[i - 1][1].first + x + a[i - 1], dp[i - 1][1].second - 1});
}
return max(dp[n][0], dp[n][1]);
};
while(r - l > 1){
int m = (r + l) / 2;
if(-check(m).second >= k){
r = m;
} else {
l = m;
}
}
cout << check(r).first + r * check(r).second << '\n';
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... |