Submission #1198738

#TimeUsernameProblemLanguageResultExecution timeMemory
1198738tab1540Feast (NOI19_feast)C++20
100 / 100
98 ms11000 KiB
#include <iostream>

using namespace std;

int arr[300009];
int n, k;

pair<long long, int> dp[300009][2];

pair<long long, int> gaymen(long long pen) {
    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][1].first + arr[i], dp[i - 1][1].second),
            // max(
                make_pair(dp[i - 1][0].first + arr[i] - pen, dp[i - 1][0].second + 1)
                // make_pair(dp[i - 1][1].first + arr[i] - pen, dp[i - 1][1].second + 1)
            // )
        );
    }
    return max(
        dp[n][1],
        dp[n][0]
    );
}

long long r = 1;

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    dp[0][1].first = -(1ll << 60);
    cin >> n >> k;

    for (int i = 1;  i<= n; i++) {
        cin >> arr[i];
        r += abs(arr[i]);
    } 


    long long l = 0;

    while (l < r) {
        long long mid = (l + r + 1) >> 1;

        if (gaymen(mid).second >= k) {
            l = mid;
        } else {
            r = mid - 1;
        }
    }

    cout << gaymen(l).first + l * k;

    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...