Submission #1289944

#TimeUsernameProblemLanguageResultExecution timeMemory
1289944chuyenluagaFeast (NOI19_feast)C++20
4 / 100
82 ms12000 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;
ll a[maxn];

pii dp[maxn][2];

int main() {

    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL);cout.tie(NULL);

	ll 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]);
       // cout << m << " " << ans.first << " " << ans.second << endl;
        
        
        /*if (ans.second >= k){
            s = ans.first + m * k;
            l = m+1;
        }
        else r = m - 1;
        */

        if (ans.second < k){
            s = ans.first + m * k;
            r = m - 1;
        }
        else l = m+1;
        

        
    }
    cout << s << 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...