Submission #1365661

#TimeUsernameProblemLanguageResultExecution timeMemory
1365661FaresSTHSplit the sequence (APIO14_sequence)C++20
33 / 100
2 ms1092 KiB
#include"bits/stdc++.h"
using namespace std;
// #define int long long
#define S second
#define F first
const int mxn=1e5+1;
const int mxk=2e2+1;
int a[mxn],p[mxn],pr[mxn][mxk];
long long dp[mxn][2];
signed main(){
	cin.tie(0)->sync_with_stdio(0);
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		p[i]=p[i-1]+a[i];
	}
	for(int j=1;j<=k;j++){
		for(int i=j+1,l=j;i<=n;i++){
			while(l+1<i&&dp[l][0]+1ll*(p[i]-p[l])*p[l]<=dp[l+1][0]+1ll*(p[i]-p[l+1])*p[l+1])l++;
			dp[i][1]=dp[l][0]+1ll*(p[i]-p[l])*p[l];
			pr[i][j]=l;
		}
		for(int i=j+1;i<=n;i++)dp[i][0]=dp[i][1];
	}
	cout<<dp[n][0]<<'\n';
	while(k){
		cout<<pr[n][k]<<' ';
		n=pr[n][k];
		k--;
	}
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...