This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define read() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define day() time_t now = time(0);char* x = ctime(&now);cerr<<"Right Now Is : "<<x<<"\n"
#define ii pair<int,int>
#define X first
#define Y second
const long long MAX = (int)1e5 + 5;
const long long INF = (int)1e18;
const long long MOD = (int)1e9 + 7;
const int N = 200 + 5;
int n,k;
int trace[N][MAX];
long long pref[MAX];
long long a[MAX];
long long f[MAX];
long long g[MAX];
long long cost(int l,int r){
return (pref[r] - pref[l - 1]) * (pref[n] - pref[r]);
}
int cnt = 0;
void solve(int l,int r,int u,int v){
if(l > r)return;
int mid = l + r >> 1;
pair<long long,int> best = {-INF,0};
for(int i = u;i <= min(mid,v);i++){
best = max(best,{g[i - 1] + cost(i,mid),i});
}
f[mid] = best.X;
trace[cnt][mid] = best.Y;
//cout << cnt << " " << mid << " " << best.X << " " << best.Y << '\n';
solve(l,mid - 1,u,best.Y);
solve(mid + 1,r,best.Y,v);
}
signed main(){
read();
cin >> n >> k;
for(int i = 1;i <= n;i++){
cin >> a[i];
pref[i] = pref[i - 1] + a[i];
}
for(int j = 1;j <= n;j++){
f[j] = -INF;
g[j] = -INF;
}
f[0] = -INF;
for(int i = 1;i <= k;i++){
cnt++;
solve(1,n,1,n);
for(int j = 0;j <= n;j++){
g[j] = f[j];
f[j] = -INF;
}
}
int res = -INF;
int id = 0;
for(int i = 1;i <= n;i++){
if(g[i] > res){
res = g[i];
id = i;
}
}
cout << res << '\n';
vector<int> ans;
ans.push_back(id);
for(int i = k;i > 1;i--){
id = trace[i][id];
id--;
ans.push_back(id);
}
for(int i = (int)ans.size() - 1;i >= 0;i--){
cout << ans[i] << " ";
}
}
Compilation message (stderr)
sequence.cpp: In function 'void solve(int, int, int, int)':
sequence.cpp:31:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
31 | int mid = l + r >> 1;
| ~~^~~
# | 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... |