Submission #1190823

#TimeUsernameProblemLanguageResultExecution timeMemory
1190823pemguimnFeast (NOI19_feast)C++20
12 / 100
252 ms16860 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pii pair<int, int>

const int INF = 1e18 + 5;

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
        
    int n, k; cin >> n >> k;
    vector<int> a(n);
    for(int &x : a) cin >> x;

    int lo = 0, hi = 1e9, ans = 0;

    auto check = [&](int lb){
        vector dp(2, vector<pii> (n, {-INF, 0}));
        dp[0][0] = {0, 0};
        dp[1][0] = {-lb + a[0], 1};
        for(int i = 1; i < n; i++){
            dp[0][i] = max(dp[0][i - 1], dp[1][i - 1]);
            dp[1][i] = max( pii {dp[0][i - 1].first - lb + a[i], dp[0][i - 1].second + 1}, 
                            {dp[1][i - 1].first + a[i], dp[1][i - 1].second});
        }
        return max(dp[0][n - 1], dp[1][n - 1]);
    };

    while(lo < hi){
        int mid = (lo + hi + 1) / 2;

        pii cur = check(mid);
        if(cur.second >= k){
            lo = mid;
        } else{
            hi = mid - 1;
        }
    }
    cout << check(lo).first + lo * k << '\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...