Submission #1190819

#TimeUsernameProblemLanguageResultExecution timeMemory
1190819pemguimnFeast (NOI19_feast)C++20
100 / 100
513 ms16856 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int, int> const int INF = 1e18 + 5; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; vector<int> a(n); for(int &x : a) cin >> x; int lo = 0, hi = 1e18, ans = 0; auto check = [&](int lb){ vector dp(2, vector<pii> (n, {-INF, 0})); dp[0][0] = {0, 0}; dp[1][0] = {-lb + a[0], 1}; for(int i = 1; i < n; i++){ dp[0][i] = max(dp[0][i - 1], dp[1][i - 1]); dp[1][i] = max( pii {dp[0][i - 1].first - lb + a[i], dp[0][i - 1].second + 1}, {dp[1][i - 1].first + a[i], dp[1][i - 1].second}); } return max(dp[0][n - 1], dp[1][n - 1]); }; while(lo < hi){ int mid = (lo + hi + 1) / 2; pii cur = check(mid); if(cur.second >= k){ lo = mid; } else{ hi = mid - 1; } } cout << check(lo).first + lo * k << '\n'; }
#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...