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;
typedef long long ll;
vector<int> a;
vector<ll> pf;
pair<ll, int> solve(ll cost){
vector<pair<ll, int>> dp(a.size());
pair<ll, int> maxval(0, 0);
for (int i=0; i<a.size(); i++){
dp[i] = max(i ? dp[i-1] : make_pair(0LL, 0),
make_pair(pf[i] - cost + maxval.first, maxval.second + 1));
maxval = max(maxval, make_pair(-pf[i] + dp[i].first, dp[i].second));
}
return dp.back();
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int n, k; cin >> n >> k;
a.resize(n);
for (int i=0; i<n; i++) cin >> a[i];
pf.resize(n);
for (ll i=0, p=0; i<n; i++){
p = pf[i] = p + a[i];
}
ll bl = 0, br = 1e15;
while (bl < br){
ll bm = (bl + br)>>1;
pair<ll, int> r = solve(bm);
if (r.second <= k) br = bm;
else bl = bm+1;
}
pair<ll, int> r = solve(bl);
cout << r.first + bl*r.second << "\n";
}
Compilation message (stderr)
feast.cpp: In function 'std::pair<long long int, int> solve(ll)':
feast.cpp:9:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
9 | for (int i=0; i<a.size(); i++){
| ~^~~~~~~~~
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |