제출 #902467

#제출 시각아이디문제언어결과실행 시간메모리
902467thinknoexitFeast (NOI19_feast)C++17
30 / 100
80 ms10488 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int a[300300], n; ll qs[300300]; ll dp[300300]; int cnt[300300]; void cal(ll mid) { pair<ll, int> mx(0ll, 0); for (int i = 1;i <= n;i++) { dp[i] = dp[i - 1]; cnt[i] = cnt[i - 1]; if (qs[i] + mx.first - mid > dp[i]) { dp[i] = qs[i] + mx.first - mid; cnt[i] = mx.second + 1; } mx = max(mx, { dp[i] - qs[i], cnt[i] }); } } int main() { cin.tie(nullptr)->sync_with_stdio(false); int k; cin >> n >> k; for (int i = 1;i <= n;i++) { cin >> a[i]; qs[i] = qs[i - 1] + a[i]; } ll l = -1e13, r = 1e13; while (l < r) { ll mid = l + (r - l + 1) / 2; cal(mid); if (cnt[n] >= k) l = mid; else r = mid - 1; } cal(l); cout << dp[n] + l * k; 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...