제출 #1209943

#제출 시각아이디문제언어결과실행 시간메모리
1209943quannnguyen2009Feast (NOI19_feast)C++20
100 / 100
109 ms12176 KiB
#include<bits/stdc++.h> #define int long long #define fi first #define se second #define pb push_back #define ii pair<int, int> #define sz(v) (int)v.size() #define all(v) v.begin(), v.end() using namespace std; const int N = 3e5+5, mod = 1e9+7, inf = 1e18; int n, k; int a[N]; ii dp[N][2]; ii solve(int lmb) { dp[0][0] = {0, 0}; dp[0][1] = {a[0]-lmb, 1}; for (int i=1; i<n; i++) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); dp[i][1] = max(make_pair(dp[i-1][0].fi+a[i]-lmb, dp[i-1][0].se+1), make_pair(dp[i-1][1].fi+a[i], dp[i-1][1].se)); } return max(dp[n-1][0], dp[n-1][1]); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for (int i=0; i<n; i++) cin >> a[i]; int lo = 0, hi = inf; while (lo<hi) { int mid = (lo+hi+1)/2; if (solve(mid).se>=k) { lo = mid; } else { hi = mid-1; } } cout << solve(lo).fi+lo*k; }
#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...