#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
const ll mod = 998244353;
const ll mod2 = 1e9 + 6;
const ll INF = 2e18;
const int INT_INF = 1e9 + 11;
// const double PI = acos(-1);
// mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
// ll rand(ll l, ll r)
// {
// uniform_int_distribution<ll> uid(l, r);
// return uid(mt);
// }
long long binpow(long long base, long long power, long long mod) {
if (base == 0) return 0;
if (base == 1) return 1;
if (power <= 0) return 1;
long long multiplier = (power % 2 == 0 ? 1 : base) % mod;
return (multiplier * binpow((base * base) % mod, power / 2, mod)) % mod;
}
ll gcd(ll a, ll b) {
if(b == 0) return a;
return gcd(b, a % b);
}
int n;
pair<ll, ll> solve(vector<ll>& arr, ll penalty){
vector<vector<pair<ll, ll>>> dp(n, vector<pair<ll, ll>>(2));
dp[0][0] = {0, 0};
dp[0][1] = {arr[0] - penalty, 1};
for (int i = 1; i < n; i++) {
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
dp[i][1] =
max(make_pair(dp[i - 1][0].first + arr[i] - penalty, dp[i - 1][0].second + 1),
make_pair(dp[i - 1][1].first + arr[i], dp[i - 1][1].second));
}
return max(dp[n - 1][0], dp[n - 1][1]);
}
void Run(){
ll k; cin >> n >> k;
vector<ll> arr(n + 1, 0);
for(int i = 0; i < n; i++) cin >> arr[i];
ll l = 0;
ll r = 1e18;
while(l < r){
ll md = (l + r + 1) / 2;
pair<ll, ll> ans = solve(arr, md);
if(ans.second >= k) l = md;
else r = md - 1;
}
pair<ll, ll> ans = solve(arr, l);
cout << ans.first + l * k << "\n";
}
int main(){
//freopen("point3.in", "r", stdin);
//freopen("point3.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(nullptr); cout.tie(nullptr);
int test = 1;
//cin >> test;
auto time_start = clock();
while(test--) Run();
auto time_end = clock();
cerr << "Time taken: " << time_end - time_start << "\n";
}
# | 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... |