제출 #1211334

#제출 시각아이디문제언어결과실행 시간메모리
1211334maltaFeast (NOI19_feast)C++20
18 / 100
114 ms7452 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector<ll> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } vector<ll> prefix(n + 1, 0); for (int i = 1; i <= n; ++i) { prefix[i] = prefix[i - 1] + a[i - 1]; } ll lo = -1e14, hi = 1e14; ll ans = -1e18; for (int iter = 0; iter < 100; ++iter) { ll mid = lo + (hi - lo) / 2; vector<ll> dp(n + 1, -1e18); dp[0] = 0; ll max_val = -1e18; for (int i = 1; i <= n; ++i) { if (i >= 2) { max_val = max(max_val, dp[i - 1] - prefix[i - 1]); } else { max_val = dp[0] - prefix[0]; // 0 } ll candidate = max_val + prefix[i] - mid; dp[i] = max(dp[i - 1], candidate); } int s = 0; for (int i = 1; i <= n; ++i) { if (dp[i] > dp[i - 1]) { s++; } } if (s == k) { ans = dp[n] + mid * k; } // Adjust binary search if (s > k) { lo = mid + 1; } else { hi = mid - 1; } } cout << ans << '\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...