Submission #1289948

#TimeUsernameProblemLanguageResultExecution timeMemory
1289948chuyenluagaFeast (NOI19_feast)C++20
0 / 100
92 ms11896 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];
ll n,k;
pii dp[maxn][2];


pii calc(int  m){
    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));
          
        }
  return max(dp[n][0],dp[n][1]);
}



int main() {

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

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

        
    }
    cout << calc(s).first + k*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...