#include <bits/stdc++.h>
using namespace std;
const int maxn = 300005;
const long long inf = 3e14;
int n, k;
int a[maxn];
pair<long long, int> dp[maxn][2];
pair<long long, int> solve(long long lambda)
{
dp[1][0] = {0, 0};
dp[1][1] = {a[1] + lambda, 1};
for (int i = 2; i <= n; ++i)
{
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
dp[i][1] = max(make_pair(dp[i - 1][1].first + a[i], dp[i - 1][1].second), make_pair(dp[i - 1][0].first + a[i] + lambda, dp[i - 1][0].second + 1));
}
return max(dp[n][0], dp[n][1]);
}
void fastIO()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
int main()
{
fastIO();
cin >> n >> k;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
}
long long l = -inf;
long long r = 0;
while (l <= r)
{
long long mid = (l + r) / 2;
pair<long long, int> best = solve(mid);
//cout << "now " << l << " " << r << " " << mid << " :: " << best.first - best.second * mid << " " << best.second << endl;
if (best.second > k)
{
r = mid - 1;
}
else
{
l = mid + 1;
}
}
//cout << "now lambda " << r << " :: " << solve(r).second << endl;
cout << solve(r).first - (1LL * k) * r << endl;
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... |