Submission #1285716

#TimeUsernameProblemLanguageResultExecution timeMemory
1285716c32ardashFeast (NOI19_feast)C++17
100 / 100
233 ms12152 KiB
#include <iostream> #define int long long using namespace std; const int NMAX=3e5+5; int n, k, v[NMAX]; struct dyn{int val, cnt;}dp[2][NMAX], ans; dyn maxx(dyn a, dyn b) { if(a.val==b.val) return ((a.cnt>b.cnt)?a:b); return ((a.val>b.val)?a:b); } void solve(int lambda) { dp[0][0]={0, 0}; dp[1][0]={-lambda, 1}; for(int i=1;i<=n;i++) { dp[0][i]=maxx(dp[0][i-1], dp[1][i-1]); dp[1][i]=maxx({dp[0][i-1].val+v[i]-lambda, dp[0][i-1].cnt+1}, {dp[1][i-1].val+v[i], dp[1][i-1].cnt}); } ans=maxx(dp[0][n], dp[1][n]); } int caut_bin() { int r=0, pas=(1LL<<62); while(pas) { solve(r+pas); if(ans.cnt>=k) r+=pas; pas/=2; } solve(r); return ans.val+r*k; } signed main() { cin>>n>>k; for(int i=1;i<=n;i++) cin>>v[i]; cout<<caut_bin(); 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...