제출 #1281041

#제출 시각아이디문제언어결과실행 시간메모리
1281041ksjsjsjsjsjsjsFeast (NOI19_feast)C++20
100 / 100
178 ms21568 KiB
#include <bits/stdc++.h> using namespace std; mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); long long rand(long long l, long long r) { return uniform_int_distribution<long long>(l, r)(rd); } #define int long long #define pussy pair<__int128, int> const int oo = 3e14 + 5; const int N = 3e5 + 5; int n, k, a[N]; pussy d[N][2]; pussy dp(int lambda) { for (int i = 1; i <= n; ++i) { for (int j = 0; j < 2; ++j) { // dont take d[i][j] = d[i - 1][0]; // take new segment d[i][j] = max(d[i][j], {d[i - 1][1].first + a[i] - lambda, d[i - 1][1].second + 1}); // continue current segment if (j) d[i][j] = max(d[i][j], {d[i - 1][1].first + a[i], d[i - 1][1].second}); } } return d[n][0]; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifdef LOCAL // freopen("TEST.inp", "r", stdin); // freopen("TEST.out", "w", stdout); #else // freopen("TEST.inp", "r", stdin); // freopen("TEST.out", "w", stdout); #endif cin >> n >> k; for (int i = 1; i <= n; ++i) { cin >> a[i]; } int l = -oo, r = oo, cut = -oo; while (l <= r) { int mid = l + (r - l) / 2; auto [sum, cnt] = dp(mid); if (cnt >= k) { cut = mid; l = mid + 1; } else r = mid - 1; } // cerr << "DB>> " << cut << '\n'; int ans = 0; if (cut >= 0) { auto [sum, cnt] = dp(cut); ans = sum + k * cut; } else { auto [sum, cnt] = dp(0); ans = sum; } 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...