이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
vector<long long>dp1,dp0;
vector<vector<int>>dpa;
vector<int>ps,suf;
int n,k;
void solve(int l,int r,int tl,int tr,int fj){
//cout<<l<<" "<<r<<" "<<tl<<" "<<tr<<" "<<fj<<endl;
if(l>r||tl>tr){
return ;
}
if(tl==tr){
for(int i=l;i<=r;i++){
dpa[i][fj]=tl;
}
return ;
}
int mid=(l+r)>>1;
for(int i=tl;i<=min(tr,mid-1);i++){
long long fake=dp0[i]+1ll*(ps[mid]-ps[i])*suf[mid+1];
if(fake>dp1[mid]){
dp1[mid]=fake;
dpa[mid][fj]=i;
}
}
solve(l,mid-1,tl,dpa[mid][fj],fj);
solve(mid+1,r,dpa[mid][fj],tr,fj);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
vector<int>all(n+1);
for(int i=1;i<=n;i++){
cin>>all[i];
}
dp1.resize(n+3);
dp0.resize(n+3);
dpa.resize(n+3,vector<int>(k+5));
ps.resize(n+3);
suf.resize(n+3);
for(int i=1;i<=n;i++){
ps[i]=ps[i-1]+all[i];
}
for(int i=n;i>=1;i--){
suf[i]=all[i]+suf[i+1];
}
for(int i=1;i<=n;i++){
dp1[i]=1ll*ps[i]*suf[i+1];
dpa[i][1]=-1;
}
for(int j=2;j<=k;j++){
swap(dp0,dp1);
for(int i=0;i<=n;i++){
dp1[i]=0;
}
solve(j,n,1,n,j);
for(int i=1;i<j;i++){
dp1[i]=dp0[i];
dpa[i][j]=dpa[i][j-1];
}
for(int i=j;i<=n;i++){
dp1[i]=dp0[dpa[i][j]]+1ll*(ps[i]-ps[dpa[i][j]])*suf[i+1];
}
}
long long maxa=-1,w=0;
for(int i=1;i<n;i++){
if(dp1[i]>maxa){
w=i;
maxa=dp1[i];
}
}
cout<<maxa<<"\n";
int now=k;
vector<int>res;
vector<int>vis(n+3);
while(now>0&&w>0){
//cout<<now<<" "<<w<<endl;
res.push_back(w);
vis[w]=1;
w=dpa[w][now];
now--;
}
reverse(res.begin(),res.end());
for(int i=1;i<n;i++){
if(now>0&&vis[i]==0){
now--;
res.push_back(i);
}
}
for(auto x:res){
cout<<x<<" ";
}
cout<<endl;
}
# | 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... |