#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int v[300005];
// 1 / 0 - open / close
pair <ll, int> dp[300005][2];
int n, k;
pair <ll, int> solve(ll lambda) {
dp[0][0] = {0, 0};
dp[0][1] = {-lambda, 1};
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].first + v[i] - lambda, dp[i - 1][0].second + 1), make_pair(dp[i - 1][1].first + v[i], dp[i - 1][1].second));
}
return max(dp[n][0], dp[n][1]);
}
ll bin_src() {
ll st = 0, dr = 1e18, med, poz = -1, rez = 0;
while (st <= dr) {
med = (st + dr) >> 1;
auto temp = solve(med);
if (temp.second >= k) {
poz = med;
rez = temp.first + med * k;
st = med + 1;
}
else dr = med - 1;
}
return poz;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> v[i];
ll best = bin_src();
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... |