Submission #1264972

#TimeUsernameProblemLanguageResultExecution timeMemory
1264972stefanneaguFeast (NOI19_feast)C++20
100 / 100
110 ms12184 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int nmax = 5e5 + 1, inf = 1e18; pair<int, int> dp[nmax][2]; int v[nmax]; int n; pair<int, int> solve(int lmb) { dp[1][0] = {0, 0}; dp[1][1] = {v[1] - lmb, 1}; for (int i = 2; i <= n; i++) { dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]); dp[i][1] = {dp[i - 1][1].first + v[i], dp[i - 1][1].second}; dp[i][1] = max(dp[i][1], {dp[i - 1][0].first + v[i] - lmb, dp[i - 1][0].second + 1}); } return max(dp[n][0], dp[n][1]); } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int k; cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> v[i]; } int l = 0, r = inf, ans = 0; while (l <= r) { int mid = (l + r) / 2; if (solve(mid).second >= k) { ans = mid; l = mid + 1; } else { r = mid - 1; } } cout << solve(ans).first + ans * k << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...