Submission #1255275

#TimeUsernameProblemLanguageResultExecution timeMemory
1255275mountainsaltFeast (NOI19_feast)C++20
12 / 100
56 ms9800 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int N = 3e5 + 5; ll n, k, a[N], p[N]; pair <ll, ll> solve(int lmb){ pair <ll, ll> mx = {0, 0}; vector <pair <ll, ll>> dp(n + 1); for (int i = 1; i <= n; i++) { dp[i] = max(dp[i - 1], {mx.first + p[i] - lmb, mx.second + 1}); mx = max(mx, {dp[i].first - p[i], dp[i].second}); } dp[n].first += dp[n].second * lmb; return dp[n]; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; p[i] = p[i - 1] + a[i]; } ll l = 1, r = 1e9, mid = 0, ans = 0; while (l <= r) { mid = l + (r - l) / 2; pair <ll, ll> cur = solve(mid); if (cur.second > k) l = mid + 1; else if (cur.second <= k) ans = max(ans, cur.first), r = mid - 1; } cout << ans; }
#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...