Submission #1317993

#TimeUsernameProblemLanguageResultExecution timeMemory
1317993hccoderFeast (NOI19_feast)C++20
100 / 100
624 ms20464 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll inf = 1e18; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, k; cin>>n>>k; vector<int> a(n+1); vector<ll> pref(n+1); for (int i = 1; i<=n; i++) { cin>>a[i]; pref[i] = pref[i-1] + a[i]; } auto f = [&] (ll lambda) -> pair<ll, int> { vector<int> cnt(n+1, n+1); vector<ll> dp(n+1, -inf); cnt[0] = dp[0] = 0; priority_queue<pair<ll, int>> q; q.push({0, 0}); for (int i = 1; i<=n; i++){ auto [x, c] = q.top(); c*=-1; dp[i] = x + pref[i] - lambda; cnt[i] = c+1; if (dp[i-1]>dp[i] || (dp[i-1]==dp[i] && cnt[i-1]<cnt[i])) { dp[i] = dp[i-1]; cnt[i] = cnt[i-1]; } q.push({dp[i]-pref[i], -cnt[i]}); } return {dp[n], cnt[n]}; }; ll l = 0, r = 1e12; while(r-l>1){ ll mid = (l+r)/2; auto [x, y] = f(mid); if (y<=k) r = mid; else l = mid; } auto [x, y] = f(r); cout<<x+r*y; }
#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...