Submission #1295775

#TimeUsernameProblemLanguageResultExecution timeMemory
1295775RaduMFeast (NOI19_feast)C++20
0 / 100
77 ms10760 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...