Submission #1338692

#TimeUsernameProblemLanguageResultExecution timeMemory
1338692selunelle수열 (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);
	priority_queue < pair<ll,pair<ll,ll> > > pq;
	pq.push({jj.ss,{0,jj.ff}});
	pq.push({jj.ss,{jj.ff+1,n-1}});
	while(k>0 && !pq.empty()){
    	auto de=pq.top(); pq.pop();
    	ll l=de.ss.ff;
    	ll r=de.ss.ss;
    	if(l>r) continue;
    	auto jj=check(v,l,r);
    	if(jj.ff==-1) continue;
    	ans1 += jj.ss;
    	ans2.push_back(jj.ff+1);
    	pq.push({jj.ss,{l,jj.ff-1}});
    	pq.push({jj.ss,{jj.ff+1,r}});
   		k--;
	}
	cout<<ans1<<"\n";
	sort(ans2.begin(),ans2.end());
	for(auto jj:ans2){
		cout<<jj<<" ";
	}
}
#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...