Submission #95377

#TimeUsernameProblemLanguageResultExecution timeMemory
95377LittleFlowers__수열 (APIO14_sequence)C++14
71 / 100
223 ms132096 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #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<int,pair<int,int>>; const int N=100010; int n,k,ma,it; int a[N],s[N],x[N]; vector<int> ans; int cur; int F[210][N],P[210][N]; ii st[N],T[210][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); //freopen("SEQUENCE.inp","r",stdin); 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]; T[0][0]=mp(0,0,0); for(int c=1;c<=k;++c) { cur=0; for(int i=c;i<n;++i) { if(cur && st[cur].fi==T[c-1][i-1].fi) cur--; while(cur>=2 && G[cur]<=I(st[cur],T[c-1][i-1])) cur--; st[++cur]=T[c-1][i-1]; 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[c][i]=(st[o].fi+s[i])*x[i] + st[o].se; P[c][i]=st[o].rd; T[c][i]=mp(-s[i],F[c][i],i); } } for(int i=k;i<n;++i) if(ma<=F[k][i]) ma=F[k][i],it=i; cur=k; while(it) { 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:21: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...