Submission #304417

#TimeUsernameProblemLanguageResultExecution timeMemory
304417vipghn2003Split the sequence (APIO14_sequence)C++14
71 / 100
433 ms131076 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int N=1e5+5;
const int K=205;
int n,k,opt[K][N];
ll s[N],dp[K][N];

void calc(int lev,int l,int r,int L,int R)
{
    if(l>r) return ;
    int mid=(l+r)/2;
    dp[lev][mid]=1e18;
    for(int i=L;i<=min(mid-1,R);i++)
    {
        if(dp[lev][mid]>dp[lev-1][i]+(s[mid]-s[i])*(s[mid]-s[i]))
        {
            dp[lev][mid]=dp[lev-1][i]+(s[mid]-s[i])*(s[mid]-s[i]);
            opt[lev][mid]=i;
        }
    }
    calc(lev,l,mid-1,L,opt[lev][mid]);
    calc(lev,mid+1,r,opt[lev][mid],R);
}

main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n>>k;
    k++;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
        s[i]+=s[i-1];
    }
    ll res=s[n]*s[n];
    dp[1][0]=1e18;
    for(int i=0;i<=k;i++) dp[i][0]=1e18;
    for(int i=1;i<=n;i++)
    {
        dp[1][i]=s[i]*s[i];
        opt[1][i]=i;
    }
    for(int lev=2;lev<=k;lev++) calc(lev,1,n,0,n-1);
    res-=dp[k][n];
    cout<<res/2<<'\n';
    int cur=n;
    while(k>1)
    {
        cur=opt[k][cur];
        k--;
        cout<<cur<<' ';
    }
}

Compilation message (stderr)

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