#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n, k;
ll qs[300005];
pair<ll, int> dp[300005];
ll l = -1e9, r = 0, mid;
pair<ll, int> calcdp(ll reward) {
pair<ll, int> cmx, cmxdp;
for(int i=1;i<=n;i++) {
dp[i] = {cmx.first + qs[i] + reward, cmx.second+1};
cmxdp = max(cmxdp, dp[i]);
cmx = max(cmx, pair<ll, int>(cmxdp.first - qs[i], cmxdp.second));
}
return cmxdp;
}
ll fl(ll a, ll b) {
return a/b - ((a^b) < 0 && a%b);
}
int main() {
cin.tie(0) -> sync_with_stdio(0);
cin >> n >> k;
for(int i=1;i<=n;i++) {
cin >> qs[i];
qs[i] += qs[i-1];
}
while(l < r) {
mid = fl(l+r, 2);
if(calcdp(mid).second < k) l = mid+1;
else r = mid;
}
cout << calcdp(r).first-(r*k);
}
# | 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... |