Submission #1225241

#TimeUsernameProblemLanguageResultExecution timeMemory
1225241kunzaZa183Palembang Bridges (APIO15_bridge)C++20
100 / 100
80 ms4536 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { int k, n; cin >> k >> n; ll ans = 0; vector<ll> vi; vector<pair<int, int>> vpii; for (int i = 0; i < n; i++) { char a, b; int x, y; cin >> a >> x >> b >> y; if (a == b) { ans += abs(y - x); } else { vpii.push_back(minmax(x, y)); ans++; } } sort(vpii.begin(), vpii.end(), [&](pair<int, int> a, pair<int, int> b) { return (a.first + a.second) < (b.first + b.second); }); // cout << "VPII:\n"; // for (auto a : vpii) // cout << a.first << " " << a.second << "\n"; // cout << "\n"; vector<ll> pref(vpii.size() + 1), suf(vpii.size() + 1); pref[0] = 0; priority_queue<int> pqi; priority_queue<int, vector<int>, greater<int>> pqi2; ll sm = 0, sm2 = 0; auto ins = [&](int x) { if (pqi.empty() || x > pqi.top()) { pqi2.push(x); sm2 += x; if (pqi2.size() > pqi.size()) { sm2 -= pqi2.top(); sm += pqi2.top(); pqi.push(pqi2.top()); pqi2.pop(); } } else { pqi.push(x); sm += x; if (pqi.size() > pqi2.size() + 1) { sm2 += pqi.top(); sm -= pqi.top(); pqi2.push(pqi.top()); pqi.pop(); } } }; for (int i = 1; i <= vpii.size(); i++) { // cout << i << "\n"; ins(vpii[i - 1].first), ins(vpii[i - 1].second); // cout << "PASS\n"; ll x = pqi.top(); pref[i] = (x * pqi.size() - sm) + (sm2 - x * pqi2.size()); } // for (auto a : pref) // cout << a << " "; // cout << "\n"; if (k == 1) { cout << ans + pref.back() << "\n"; return 0; } pqi = priority_queue<int>(); pqi2 = priority_queue<int, vector<int>, greater<int>>(); suf[vpii.size()] = 0; sm = sm2 = 0; for (int i = ((int)(vpii.size())) - 1; i >= 0; i--) { ins(vpii[i].first), ins(vpii[i].second); ll x = pqi.top(); suf[i] = (x * pqi.size() - sm) + (sm2 - x * pqi2.size()); } // // for (auto a : suf) // cout << a << " "; // cout << "\n"; ll minans = LLONG_MAX; for (int i = 0; i <= vpii.size(); i++) { minans = min(minans, ans + suf[i] + pref[i]); } cout << minans << "\n"; }
#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...