Submission #1209985

#TimeUsernameProblemLanguageResultExecution timeMemory
120998544100Feast (NOI19_feast)C++20
100 / 100
107 ms12176 KiB
#include <bits/stdc++.h> #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define pub push_back #define fi first #define se second #define mp make_pair using namespace std; typedef long long ll; typedef pair<ll,ll> pll; const ll Max=3e5+5; pll dp[Max][2]; ll a[Max],n,k; pll process(ll la) { ll i,j; dp[1][0]={0,0}; dp[1][1]={a[1]-la,1}; for(i=2;i<=n;++i) { dp[i][0]=max(dp[i-1][0],dp[i-1][1]); dp[i][1]=max(mp(dp[i-1][0].fi+a[i]-la,dp[i-1][0].se+1),mp(dp[i-1][1].fi+a[i],dp[i-1][1].se)); } pll res=max(dp[n][0],dp[n][1]); return res; } ll solve() { ll i,j,l,r; l=0; r=1e18; while(l<r) { ll mid=(l+r+1)>>1; pll res=process(mid); if(res.se>=k) l=mid; else r=mid-1; } pll fi_res=process(l); return fi_res.fi+l*k; } ll solve2() { ll i,j,l,r; l=0; r=1e18; //cout<<l<<" "<<r<<"\n"; while(l<=r) { ll mid=(l+r)>>1; pll res=process(mid); //cout<<"mid="<<mid<<" dp="<<res.fi<<" cnt="<<res.se<<"\n"; if(res.se==k) { /*for(i=1;i<=n;++i) { cout<<i<<".\n"; auto x=dp[i][0]; cout<<"dp="<<x.fi<<" cnt="<<x.se<<"\n"; x=dp[i][1]; cout<<"dp="<<x.fi<<" cnt="<<x.se<<"\n"; }*/ return res.fi+res.se*mid; } if(res.se>k) l=mid+1; else r=mid-1; } return 0; } int main() { fast ll i,j; cin>>n>>k; for(i=1;i<=n;++i) cin>>a[i]; ll ans=solve(); cout<<ans<<"\n"; 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...