Submission #1092959

#TimeUsernameProblemLanguageResultExecution timeMemory
1092959muhammadFeast (NOI19_feast)C++17
100 / 100
221 ms14168 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long

// Normal function to replace the lambda
pair<ll, ll> solve_lambda(int n, int a[], ll lmb) {
    pair<ll, ll> dp[n][2];

    dp[0][0] = {0, 0};
    dp[0][1] = {a[0] - lmb, 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 + a[i] - lmb, dp[i - 1][0].second + 1),
                       make_pair(dp[i - 1][1].first + a[i], dp[i - 1][1].second));
    }

    return max(dp[n - 1][0], dp[n - 1][1]);
}

int main() {
    int n, k;
    cin >> n >> k;

    int a[n];
    for (int &i : a) { cin >> i; }

    ll lo = 0;
    ll hi = 1e18;
    while (lo < hi) {
        ll mid = (lo + hi + 1) / 2;
        solve_lambda(n, a, mid).second >= k ? lo = mid : hi = mid - 1;
    }

    cout << solve_lambda(n, a, lo).first + lo * k << endl;
}
#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...