Submission #731489

#TimeUsernameProblemLanguageResultExecution timeMemory
731489mohav48173Feast (NOI19_feast)C++14
18 / 100
189 ms5324 KiB
#include<bits/stdc++.h> using namespace std; int n,k; long long a[400000]; long long m[400000]; long long mincnt=0; long long score=0; long long get(int ind) { if(ind<0)return 0; else return m[ind]; } void calc(long long lam) { long long bestscore=0; long long bestcnt=0; long long bestnxt=-lam; long long nxtcnt=0; for(int i=0;i<n;i++) { if(bestscore-lam-get(i-1)>bestnxt || (bestscore-lam-get(i-1)==bestnxt && nxtcnt>bestcnt)) { bestnxt=bestscore-get(i-1)-lam; nxtcnt=bestcnt; } if(bestnxt+get(i)>bestscore || (bestnxt+get(i)==bestscore && nxtcnt+1<bestcnt)) { bestscore=bestnxt+get(i); bestcnt=nxtcnt+1; } } mincnt=bestcnt; score=bestscore; } int main() { cin>>n>>k; for(int i=0;i<n;i++)cin>>a[i]; m[0]=a[0];for(int i=1;i<n;i++)m[i]=m[i-1]+a[i]; long long l=0,r=1e17; while(l+1<r) { long long mid=(l+r)/2; calc(mid); if(mincnt<k)r=mid; else l=mid; } calc(r); cout<<score+k*r<<endl; 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...