#include <bitset>
#include<iostream>
// #include<fstream>
#include<vector>
#include<array>
#include<algorithm>
#include<set>
#include<cmath>
#include<unordered_map>
#include<iomanip>
#include <map>
#include <queue>
#include <stack>
#include <cstring>
#include <climits>
#include <chrono>
#include <random>
#include <cassert>
using namespace std;
#define PRINTARRAY(st, en, a) for(int _i = st; _i <= en; _i++) {cout << a[_i] << (_i != en ? " " : "\n");}
#define SZ(A) (int)A.size()
using LL = long long;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const LL INF = 1e18;
int n, k;
vector<int> A(n + 1, 0);
array<LL, 2> f(LL x) {
vector<vector<array<LL,2>>> dp(n + 1, vector<array<LL,2>>(2, {0,0}));
dp[1][0] = {0, 0};
dp[1][1] = {A[1] - x, 1};
for(int i = 2; i <= n; i++) {
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
dp[i][1] = max(array<LL,2>{dp[i - 1][1][0] + A[i], dp[i - 1][1][1]}, array<LL,2>{dp[i - 1][0][0] + A[i] - x, dp[i - 1][0][1] + 1});
// for(int j = 0; j < 2; j++) {
// for(int k = 0; k < 2; k++) {
// cout << dp[i][j][k] << " ";
// }
// }
// cout << endl;
}
return max(dp[n][0],dp[n][1]);
}
void solve() {
cin >> n >> k;
A.assign(n + 1, 0);
for(int i = 1; i <= n; i++) {
cin >> A[i];
}
LL l = 0;
LL r = 1e18;
while(l < r) {
LL mid = l + (r - l) / 2;
auto [v, cnt] = f(mid);
if (cnt >= k) {
l = mid + 1;
} else {
r = mid;
}
}
LL ansx = max(l - 1, 0LL);
auto [v, cnt] = f(ansx);
cout << v + k * ansx<< "\n";
}
int main() {
cin.tie(0);
ios_base::sync_with_stdio(false);
int testcase = 1;
// cin >> testcase;
while(testcase--) {
solve();
}
}
| # | 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... |