Submission #95380

#TimeUsernameProblemLanguageResultExecution timeMemory
95380LittleFlowers__Split the sequence (APIO14_sequence)C++14
100 / 100
1128 ms85372 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second.first #define rd second.second #define mp(a,b,c) make_pair(a,make_pair(b,c)) using ii = pair<long long,pair<long long,int>>; const int N=100010; int n,k,it; long long ma; int a[N]; long long s[N],x[N]; vector<int> ans; int cur; int P[210][N]; long long F[N],H[N]; ii st[N]; double G[N]; double I(ii u,ii v){return 1.0*(v.se-u.se)/(u.fi-v.fi);} main() { ios_base::sync_with_stdio(false),cin.tie(nullptr); cin>>n>>k; for(int i=1;i<=n;++i) cin>>a[i],s[i]=s[i-1]+a[i]; for(int i=1;i<=n;++i) x[i]=s[n]-s[i]; for(int c=1;c<=k;++c) { cur=0; for(int i=c;i<n;++i) { ii T=mp(-s[i-1],H[i-1],i-1); if(cur && st[cur].fi==T.fi) cur--; while(cur>=2 && G[cur]<=I(st[cur],T)) cur--; st[++cur]=T; G[cur]=I(st[cur],st[cur-1]); int l=2,m,r=cur,o=1; while(l<=r) { m=(l+r)/2; if(G[m]>=x[i]) o=m,l=m+1; else r=m-1; } F[i]=(st[o].fi+s[i])*x[i] + st[o].se; P[c][i]=st[o].rd; } for(int i=c;i<n;++i) H[i]=F[i]; } for(int i=k;i<n;++i) if(ma<=F[i]) ma=F[i],it=i; for(;k>0;k--) ans.push_back(it), it=P[k][it]; cout<<ma<<"\n"; reverse(ans.begin(),ans.end()); for(auto i:ans) cout<<i<<" "; }

Compilation message (stderr)

sequence.cpp:23:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main()
      ^
#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...