Submission #1316583

#TimeUsernameProblemLanguageResultExecution timeMemory
1316583gamigafyFeast (NOI19_feast)C++20
100 / 100
927 ms23932 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define sz(x) (int)(x).size()

void solve() {
    int n, k;
    cin >> n >> k;

    vector<ll> a(n);
    for (auto &x : a) cin >> x;

    auto chk = [&](ll lam) {
        vector dp(n + 1, vector<pair<ll, int>>(2, {-1E18, -1E18}));
        dp[0][0] = {0, 0};
        for (int i = 0; i < n; i++) {
            dp[i + 1][0] = max(dp[i][0], dp[i][1]);
            dp[i + 1][1] = max(
                make_pair(dp[i][1].first + a[i], dp[i][1].second),
                make_pair(dp[i][0].first + a[i] - lam, dp[i][0].second + 1)
            );
        }
        return max(dp[n][0], dp[n][1]);
    };

    ll l = 0, r = 1E18;
    while (l < r) {
        ll mid = (l + r + 1) / 2;
        auto [_, cnt] = chk(mid);
        if (cnt >= k) {
            l = mid;
        } else {
            r = mid - 1;
        }
    }

    cout << chk(l).first + l * k << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t = 1;
    // cin >> t;
    while (t--) solve();
    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...