Submission #95376

#TimeUsernameProblemLanguageResultExecution timeMemory
95376LittleFlowers__Split the sequence (APIO14_sequence)C++14
11 / 100
43 ms17532 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);
    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)
        {
            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...