제출 #1351605

#제출 시각아이디문제언어결과실행 시간메모리
1351605PakinDioxideFeast (NOI19_feast)C++17
41 / 100
42 ms1944 KiB
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int mxN = 2e5+5;

ll a[mxN];

int main() {
    int n, k; cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    auto calc = [&] (ll l) {
        pair <ll, ll> dp[2];
        dp[0] = make_pair(0, 0);
        dp[1] = make_pair(a[1] - l, -1);
        for (int i = 2; i <= n; i++) {
            pair <ll, ll> x, y;
            x = max(dp[0], dp[1]);
            y = max(
                    make_pair(dp[0].first + a[i] - l, dp[0].second - 1),
                    make_pair(dp[1].first + a[i], dp[1].second)
                   );
            dp[0] = x, dp[1] = y;
        }
        return max(dp[0], dp[1]);
    };
    ll L = 0, R = 3e14, ans = 0;
    while (L <= R) {
        ll x = L + (R-L)/2;
        if (-calc(x).second > k) L = x+1;
        else R = x-1, ans = x;
    }
    cout << calc(ans).first + k * ans << '\n';
}
#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...