Submission #1340571

#TimeUsernameProblemLanguageResultExecution timeMemory
1340571khangai11Split the sequence (APIO14_sequence)C++20
0 / 100
1 ms344 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
void solve(){
	ll n,k;
	cin>>n>>k;
	vector<ll> A(n),B(n+1,0);
	ll D=0,ma,mi;
	for(ll a=0;a<n;a++){
		cin>>A[a];
		D+=A[a];
		B[a+1]=D;
	}
	mi=D/(k+1);
	ma=(D+k)/(k+1);
	vector<pair<ll,ll>> v(n+1);
	for(ll a=0;a<n;a++){
		ll i=lower_bound(B.begin(),B.end(),B[a]+ma)-B.begin();
		ll j=upper_bound(B.begin(),B.end(),B[a]+mi)-B.begin()-1;
		v[a]={j,i};
	}
	vector<vector<ll>> dp(n+1,vector<ll>(k+2,-1)),dp1(n+1,vector<ll>(k+2));
	dp[0][0]=D*D;
	for(ll a=0;a<=n;a++){
		for(ll b=0;b<=k;b++){
			if(dp[a][b]==-1){
				continue;
			}
			if(v[a].first!=a)
			if(dp[v[a].first][b+1]<dp[a][b]-(B[v[a].first]-B[a])*(B[v[a].first]-B[a])){
				dp1[v[a].first][b+1]=a;
				dp[v[a].first][b+1]=dp[a][b]-(B[v[a].first]-B[a])*(B[v[a].first]-B[a]);
			}
			if(v[a].second!=n+1 and v[a].second!=a)
			if(dp[v[a].second][b+1]<dp[a][b]-(B[v[a].second]-B[a])*(B[v[a].second]-B[a])){
				dp1[v[a].second][b+1]=a;
				dp[v[a].second][b+1]=dp[a][b]-(B[v[a].second]-B[a])*(B[v[a].second]-B[a]);
			}
			if(v[a].first==a and v[a].second==n+1){
				while(1){
					
				}
			}
		}
	}
	cout<<dp[n][k+1]/2<<endl;
	ll i=n,j=k+1;
	vector<ll> vc;
	for(ll a=0;a<k;a++){
		i=dp1[i][j];
		j--;
		vc.push_back(i);
	}
	reverse(vc.begin(),vc.end());
	for(auto x:vc){
		cout<<x<<" ";
	}
	cout<<endl;
}
signed main(){
	ios::sync_with_stdio();
	cin.tie(0);
	cout.tie(0);
//	freopen("a.in", "r", stdin);
//	freopen("a.out", "w", stdout);
	ll t=1;
//	cin>>t;
	for(ll a=0;a<t;a++){
		solve();
	}
}
#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...