#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int n,k;
int arr[100023];
ll pref[100023],suf[100023];
int opt[100023][201];
deque<pair<int,ll>>q[201];
void onden_aldiralim_abi(int i,int j){
while(q[j].size()>1){
if(q[j][0].second-pref[q[j][0].first]*suf[i+1]<=q[j][1].second-pref[q[j][1].first]*suf[i+1])q[j].pop_front();
else break;
}
}
void arkalari_toparlayalim_ense_ferahlasin(int j,pair<int,ll>p){
while(q[j].size()>1){
pair<int,ll>a=q[j].back();q[j].pop_back();
pair<int,ll>b=q[j].back();
if(__int128_t(a.second-p.second)*__int128_t(pref[p.first]-pref[b.first])<=__int128_t(b.second-p.second)*__int128_t(pref[p.first]-pref[a.first]))continue;
q[j].push_back(a);
break;
}
q[j].push_back(p);
}
int main(){
ios_base::sync_with_stdio(false);cin.tie(NULL);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>arr[i];
pref[i]=pref[i-1]+arr[i];
}
for(int i=n;i>=1;i--){
suf[i]=suf[i+1]+arr[i];
}
arkalari_toparlayalim_ense_ferahlasin(k,{0,0});
for(int i=1;i<n;i++){
for(int j=1;j<=k;j++){
onden_aldiralim_abi(i,j);
if(q[j].size()==0)continue;
opt[i][j]=q[j][0].first;
arkalari_toparlayalim_ense_ferahlasin(j-1,{i,q[j][0].second+suf[i+1]*(pref[i]-pref[q[j][0].first])});
}
}
onden_aldiralim_abi(n,0);
cout<<q[0][0].second<<endl;
int pos=q[0][0].first;
vector<int>v;
for(int i=1;i<=k;i++){
v.push_back(pos);
pos=opt[pos][i];
}
while(v.size()){
cout<<v.back()<<" ";
v.pop_back();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |