제출 #1338683

#제출 시각아이디문제언어결과실행 시간메모리
1338683javkhlantogs수열 (APIO14_sequence)C++20
0 / 100
1 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};
	ll mn=1e9,ind=-1,x=0;
	for(ll i=l ; i<r ; i++){
		ll val=abs((pre[i]-pre[l-1])-(suff[i+1]-suff[r+1]));
		if(val<mn){
			mn=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];
		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...