Submission #931287

#TimeUsernameProblemLanguageResultExecution timeMemory
931287andrei_boacaFeast (NOI19_feast)C++17
30 / 100
47 ms19804 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF=1e17; ll n,k,v[300005]; struct date { ll val,l,r; }; date dp[300005][2]; date combine(date a, date b) { if(a.val>b.val) return a; if(a.val<b.val) return b; a.l=min(a.l,b.l); a.r=max(a.r,b.r); return a; } date calc(ll cost) { dp[0][0]={0,0,0}; dp[0][1]={-INF,0,0}; for(int i=1;i<=n;i++) { dp[i][0]=combine(dp[i-1][0],dp[i-1][1]); date a=dp[i-1][0]; a.l++; a.r++; a.val+=v[i]-cost; dp[i][1]=a; a=dp[i-1][1]; a.val+=v[i]; dp[i][1]=combine(dp[i][1],a); a=dp[i-1][1]; a.l++; a.r++; a.val+=v[i]-cost; dp[i][1]=combine(dp[i][1],a); } return combine(dp[n][0],dp[n][1]); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>k; for(ll i=1;i<=n;i++) cin>>v[i]; ll st=-1e12; ll dr=1e12; while(st<=dr) { ll mij=(st+dr)/2; date rez=calc(mij); if(rez.l<=k&&rez.r>=k) { cout<<max(0LL,rez.val+k*mij); return 0; } if(rez.l>k) st=mij+1; else dr=mij-1; } assert(false); 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...