#include<bits/stdc++.h>
#define ll long long
#define int ll
#define pii pair<int,int>
#define tiii tuple<int,int,int>
using namespace std;
int INF = numeric_limits<ll>::max()/2;
vector<int> arr;
int n;
pii solve(int lambda){
vector<vector<pii>> dp(2, vector<pii>(n+1, {-INF, 0}));
dp[0][0] = {0,0};
for(int i = 1; i <= n; i++){
dp[0][i] = max(dp[0][i-1], dp[1][i-1]);
pii cand1 = {dp[0][i-1].first+arr[i-1]-lambda,dp[0][i-1].second+1};
pii cand2 = {dp[1][i-1].first + arr[i-1], dp[1][i-1].second};
dp[1][i] = max(cand1, cand2);
}
return max(dp[0][n], dp[1][n]);
}
int32_t main(){
int k;
cin >> n >> k;
arr.resize(n);
int sum = 0;
for(int i = 0; i < n; i++){
cin >> arr[i];
sum += abs(arr[i]);
}
int l = 0; int r = INF;
int ma = 0;
while(l <= r){
int mid = (l+r)/2;
auto res = solve(mid);
if(res.second >= k){
int v = res.first+(mid*res.second);
ma = max(ma, v);
l = mid-1;
}else{
r = mid+1;
}
}
cout << ma<< 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |