Submission #1338723

#TimeUsernameProblemLanguageResultExecution timeMemory
1338723javkhlantogsSplit the sequence (APIO14_sequence)C++20
0 / 100
0 ms344 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll> a,pre,suff;
vector<ll> solve(ll l,ll r){
	if(r==l) return {0,-1,-1,-1};
	ll mx=-1,ind=-1,x=0;
	for(ll i=l ; i<r ; i++){
		ll val=(pre[i]-pre[l-1])*(suff[i+1]-suff[r+1]);
		if(val>mx){
			mx=val;
			x=(pre[i]-pre[l-1])*(suff[i+1]-suff[r+1]);
			ind=i;
		}
	}
	return {x,l,ind,r};
}
int main(){
	ll n,k,i,j,q;
	cin>>n>>k;
	ll ans=0;
	vector<ll> path;
	a.resize(n+1);
	pre.resize(n+2,0);
	suff.resize(n+2,0);
	for(i=1 ; i<=n ; i++) cin>>a[i];
	for(i=1 ; i<=n ; i++) pre[i]=pre[i-1]+a[i];
	for(i=n ; i>=1 ; i--) suff[i]=suff[i+1]+a[i];
	priority_queue<vector<ll>> pq;
	pq.push(solve(1,n));
	while(k){
		ll x=pq.top()[0];
		ll l=pq.top()[1];
		ll mid=pq.top()[2];
		ll r=pq.top()[3];
		if(l!=r){
			ans+=x;
			path.push_back(mid);
			k--;
		}
		pq.pop();
		pq.push(solve(l,mid));
		pq.push(solve(mid+1,r));
	}
	cout<<ans<<"\n";
	for(auto v:path) cout<<v<<" ";
	return 0;
}
#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...