Submission #711285

#TimeUsernameProblemLanguageResultExecution timeMemory
711285JJAnawatSplit the sequence (APIO14_sequence)C++14
0 / 100
66 ms131072 KiB
#include<bits/stdc++.h>

#define int long long

using namespace std;

const int inf=1e18;

struct CHT{
    struct line{
        int m,c,id;

        line(int mm=0,int cc=0,int i=0){
            m=mm;
            c=cc;
            id=i;
        }

        int cal(int x){
            return m*x+c;
        }

        double intersect(line l){
            return 1.0*(c-l.c)/(l.m-m);
        }
    };

    deque<pair<line,double>> dq;

    void insert(int m,int c,int i){
        line nline(m,c,i);

        while(dq.size()>1&&dq.back().second>=dq.back().first.intersect(nline))
            dq.pop_back();

        if(dq.empty())
            dq.push_back({nline,0});
        else
            dq.push_back({nline,nline.intersect(dq.back().first)});
    }

    pair<int,int> query(int x){
        while(dq.size()>1){
            if(dq[1].second<=x)
                dq.pop_front();
            else
                break;
        }
        return {dq.front().first.cal(x),dq.front().first.id};
    }
};

int n,k;
int s[100005];
int prv[100005][205];

main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> k;
    for(int i=1;i<=n;i++){
        cin >> s[i];
        s[i]+=s[i-1];
    }
    vector<int> dp(n+1,0),ndp(n+1,0);
    ++k;
    for(int j=1;j<=k;j++){
        CHT cht;
        cht.insert(0,0,0);
        for(int i=1;i<=n;i++){
            pair<int,int> pi=cht.query(s[i]);
            ndp[i]=s[n]*s[i]-s[i]*s[i]+pi.first;
            prv[i][j]=pi.second;
            cht.insert(s[i],-s[i]*s[n]+dp[i],i);
        }
        dp=ndp;
    }
    cout << ndp[n] << "\n";
    int cur=n;
    vector<int> v;
    for(int j=k;j>=2;j--){
        cur=prv[cur][j];
        v.push_back(cur);
    }
    while(!v.empty()){
        cout << v.back() << " ";
        v.pop_back();
    }
}
/*
7 3
4 1 3 4 0 2 3
*/

Compilation message (stderr)

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