제출 #1289951

#제출 시각아이디문제언어결과실행 시간메모리
1289951chuyenluagaFeast (NOI19_feast)C++20
100 / 100
90 ms12172 KiB
// Source: https://usaco.guide/general/io #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll,ll> #define fi first #define se second const int maxn = 3e5 + 5; ll a[maxn]; ll n,k; pii dp[maxn][2]; pii calc(long long m){ dp[1][0] = {0,0}; dp[1][1] = {a[1]-m,1}; for (int i = 2;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].first - m + a[i], dp[i-1][0].second+1), make_pair(dp[i-1][1].first + a[i], dp[i-1][1].second)); } return max(dp[n][0],dp[n][1]); } int main() { ios_base::sync_with_stdio(NULL); cin.tie(NULL);cout.tie(NULL); cin >> n >> k; for (int i = 1;i<=n;i++){ cin >> a[i]; } ll s = 0; ll l = 0, r = 1e18; while (l <= r){ ll m = (l+r) /2; //cerr << m << endl; pii ans = calc(m); if (ans.second >= k){ s = m; l = m+1; } else r = m - 1; // cout << m << " " << ans.first << " " << ans.second << endl; /* */ } cout << calc(s).first + k*s << endl; }
#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...