Submission #1289938

#TimeUsernameProblemLanguageResultExecution timeMemory
1289938chuyenluagaFeast (NOI19_feast)C++20
18 / 100
129 ms10968 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

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

#define fi first
#define se second

const int maxn = 3e5 + 5;
int a[maxn];

pii dp[maxn][2];

int main() {
	int n,k;
    cin >> n >> k;
    for (int i = 1;i<=n;i++){
        cin >> a[i];
    }
    
    ll s = 0;
    ll l = 0, r = 1e18;
    while (l <= r){
        ll m = (l+r) /2;
        cerr << m << endl;
        dp[1][0] = {0,0};
        dp[1][1] = {a[1]-m,1};
        for (int i = 2;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 - m + a[i], dp[i-1][0].second+1),
                       make_pair(dp[i-1][1].first + a[i], dp[i-1][1].second));
        }
        pii ans = max(dp[n][0],dp[n][1]);
        if (ans.second >= k){
            s = ans.first + m * k;
            l = m+1;
        }
        else r = m - 1;
    }
    cout << s;


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