Submission #1171977

#TimeUsernameProblemLanguageResultExecution timeMemory
1171977dmitryAdamsFeast (NOI19_feast)C++20
0 / 100
1073 ms35264 KiB
#include "bits/stdc++.h" using namespace std; # define int long long # define all(a) a.begin(), a.end() signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif int n, k; cin >> n >> k; vector<int> a(n); for(auto &i : a) cin >> i; const __int128_t BORDER = 1e12; const __int128_t INF = 1e18; int l = -BORDER, r = BORDER; vector<int> p(n + 1); for(int i = 0; i < n; ++i){ p[i + 1] = p[i] + a[i]; } auto check = [&](__int128_t x) ->pair<__int128_t, __int128_t>{ vector<vector<pair<__int128_t, __int128_t>>> dp(n + 1, vector<pair<__int128_t, __int128_t>>(2, pair<__int128_t, __int128_t>(-INF, 0))); dp[0][1] = {0, 0}; for(int i = 1; i <= n; ++i){ dp[i][0] = dp[i - 1][0]; dp[i][0].first += a[i - 1]; dp[i][1] = max(dp[i][0], dp[i - 1][1]); dp[i][0] = max(dp[i][0], {dp[i - 1][1].first + x + a[i - 1], dp[i - 1][1].second - 1}); } return max(dp[n][0], dp[n][1]); }; while(r - l > 1){ int m = (r + l) / 2; if(-check(m).second >= k){ r = m; } else { l = m; } } cout << (int)(check(r).first + r * check(r).second) << '\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...