Submission #1289069

#TimeUsernameProblemLanguageResultExecution timeMemory
1289069LIATricks of the Trade (CEOI23_trade)C++17
0 / 100
8087 ms6216 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vll vector<ll> #define pll pair<ll, ll> #define tp tuple<ll, ll, ll> const ll inf = 1e18; ll ans = -inf; ll n, k; vll b, s; vll pre; void dc(ll l, ll r, ll optl, ll optr) { if (l > r) return; ll mid = (l + r) / 2; ll ed = optr; ll st_need = max(optl, mid + k - 1); priority_queue<ll, vll, greater<ll>> pq; ll sum_k_best = 0; ll ans_mid = -inf, opt = st_need <= ed ? st_need : optl; for (ll i = mid; i <= ed; ++i) { pq.push(s[i]); sum_k_best += s[i]; if ((ll)pq.size() > k) { sum_k_best -= pq.top(); pq.pop(); } if (i < st_need) continue; ll sum = pre[i] - (mid == 0 ? 0 : pre[mid - 1]); ll cur = sum_k_best - sum; if (cur > ans_mid || (cur == ans_mid && i < opt)) { ans_mid = cur; opt = i; } } if (ans_mid > -inf) ans = max(ans, ans_mid); dc(l, mid - 1, optl, min(optr, max(optl, opt))); dc(mid + 1, r, max(optl, opt), optr); } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> k; b.resize(n); s.resize(n); pre.resize(n); for (ll i = 0; i < n; ++i) { cin >> b[i]; pre[i] = (i == 0 ? 0 : pre[i - 1]) + b[i]; } for (ll i = 0; i < n; ++i) cin >> s[i]; dc(0, n - 1, 0, n - 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...