Submission #1338673

#TimeUsernameProblemLanguageResultExecution timeMemory
1338673selunelleSplit the sequence (APIO14_sequence)C++20
0 / 100
0 ms344 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ss second
#define ff first
vector<ll> t;
void build(ll v,ll tl,ll tr,vector<ll>&a){
	if(tl==tr){
		t[v]=a[tl];
	}else{
		ll tm=(tl+tr)/2;
		build(v*2,tl,tm,a);
		build(v*2+1,tm+1,tr,a);
		t[v]=t[v*2]+t[v*2+1];
	}
}
ll qu(ll v,ll tl,ll tr,ll l,ll r){
	if(tl>r or l>tr ){
		return 0;
	}
	if(l<=tl and tr<=r){
		return t[v];
	}
	ll tm=(tl+tr)/2;
	return qu(v*2,tl,tm,l,r)+qu(v*2+1,tm+1,tr,l,r);
}


pair<ll,ll> check(vector<ll> v,ll tl,ll tr){
	ll i;
	if(tl==tr) return {-1,-1};
	ll n=v.size();
	ll sum=qu(1,0,n-1,tl,tr);
	ll pr=0;
	vector<ll> ind;
	ll ma=0;
	for(i=tl;i<=tr;i++){
		pr+=v[i];
		ll k=pr*(sum-pr);
		ind.push_back(k);
		ma=max(ma,k);
	}
	for(i=0;i<ind.size();i++){
		if(ind[i]==ma){
			return {tl+i,ind[i]};
		}
	}
	return {-1,-1};
}
int main(){
	ll n,m,k,i,j;
	cin>>n>>k;
	t.resize(4*n);
	vector<ll> v(n);
	for(i=0;i<n;i++){
		cin>>v[i];
	}
	ll ans1;
	vector<ll> ans2;
	build(1,0,n-1,v);
	auto jj=check(v,0,n-1);
	vector<pair<ll,ll> > zuun,baruun;
	k--;
	ans1=0;
	ans1+=jj.ss;
	ans2.push_back(jj.ff+1);
	zuun.push_back({0,jj.ff});
	baruun.push_back({jj.ff+1,n-1});
	while( k>0){
		auto tmpzuun=zuun;
		auto tmpbaruun=baruun;
		for(auto &x:zuun){
			if(x.ss==x.ff ) continue;
			auto jj=check(v,x.ff,x.ss);
			if(jj.ff==-1) continue;
	   			k--;
				ans1+=jj.ss;
				ans2.push_back(jj.ff+1);
				tmpzuun.push_back({jj.ff+1,x.ss});	
				x={x.ff,jj.ff};
				if(k==0){
					cout<<ans1<<"\n";
					sort(ans2.begin(),ans2.end());
					for(auto kk:ans2){
						cout<<kk<<" ";
					}
					return 0;
				}		
		}
		for(auto &x:baruun){
			if(x.ss==x.ff  ) continue;
			auto jj=check(v,x.ff,x.ss);
				if(jj.ff==-1 ) continue;
	   			k--;
				ans1+=jj.ss;
				ans2.push_back(jj.ff+1);
				tmpbaruun.push_back({jj.ff+1,x.ss});
				x={x.ff,jj.ff};	
				if(k==0){
					cout<<ans1<<"\n";
					sort(ans2.begin(),ans2.end());
					for(auto kk:ans2){
						cout<<kk<<" ";
					}
					return 0;
				}		
		}
		zuun=tmpzuun;
		baruun=tmpbaruun;
		
	}
	
}
#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...