제출 #1289105

#제출 시각아이디문제언어결과실행 시간메모리
1289105LIATricks of the Trade (CEOI23_trade)C++17
0 / 100
8090 ms6320 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 ans_mid = -inf, opt = optl; ll st = max(optl, mid), ed = optr; ll sum_k_best = 0; priority_queue<ll, vll, greater<ll>> pq; for (ll i = mid; i < st; ++i) { sum_k_best += s[i]; pq.push(s[i]); while (pq.size() > k) { ll node = pq.top(); pq.pop(); sum_k_best -= node; } } for (ll i = st; i <= ed; ++i) { ll len = i - mid + 1; pq.push(s[i]); sum_k_best += s[i]; while (pq.size() > k) { ll node = pq.top(); pq.pop(); sum_k_best -= node; } if (len < k) continue; ll sum = pre[i] - (mid == 0 ? 0 : pre[mid - 1]); ll ans_i = sum_k_best - sum; if (ans_i > ans_mid) { ans_mid = ans_i; opt = i; } } ans = max(ans, ans_mid); dc(l, mid - 1, optl, opt); dc(mid + 1, r, 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 << endl; 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...