Submission #1305431

#TimeUsernameProblemLanguageResultExecution timeMemory
1305431orzorzorzFeast (NOI19_feast)C++20
100 / 100
91 ms12156 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long const int mxN=3e5; int n, k; ll a[mxN+1]; pair<ll, ll> dp[mxN+1][2]; pair<ll, ll> f(ll pen) { dp[0][0]={0, 0}; dp[0][1]={-1e18, 0}; for(int i=1; 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+a[i]-pen, 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::sync_with_stdio(0); cin.tie(0); cin>>n>>k; for(int i=1; i<=n; i++) cin>>a[i]; ll l=0, r=1e18; ll fin=0; while(l<=r) { ll mid=(l+r)/2; if(f(mid).second>=k) { l=mid+1; fin=mid; } else { r=mid-1; } } cout<<f(fin).first+k*fin; return 0; }
#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...