Submission #1026155

#TimeUsernameProblemLanguageResultExecution timeMemory
1026155fv3Feast (NOI19_feast)C++14
4 / 100
30 ms9404 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a, b; ll res; ll solve(ll pun) { res = 0; ll last = -pun; ll seg_cnt = 0; for (auto n : b) { if (n > 0) { last += n; continue; } if (n < -pun) { if (last > 0) { res += last; seg_cnt++; } last = -pun; } else { last += n; } if (last < -pun) last = -pun; } if (last > 0) { res += last; seg_cnt++; } return seg_cnt; } int main() { ios::sync_with_stdio(0); cin.tie(0); ll N, K; cin >> N >> K; for (int i = 0; i < N; i++) { ll n; cin >> n; if (n != 0) a.push_back(n); } N = a.size(); { int i = 0; while (i < N && a[i] < 0) i++; ll sum = 0; if (i < N) sum = a[i]; for (i++; i < N; i++) { if ((a[i-1] ^ a[i]) < 0) { b.push_back(sum); sum = 0; } sum += a[i]; } if (sum != 0) b.push_back(sum); if (b.size() && b.back() <= 0) b.pop_back(); } if (b.size() == 0) { cout << 0 << '\n'; return 0; } ll l = 0ll; ll r = 1000000000000000000ll; while (l < r) { ll c = (l + r) / 2ll; ll s = solve(c); if (s == K) l = r = c; if (s > K) l = c; if (s < K) r = c; } solve(l); cout << res + K * l << '\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...