Submission #1162780

#TimeUsernameProblemLanguageResultExecution timeMemory
1162780zyadhanyPalembang Bridges (APIO15_bridge)C++20
100 / 100
49 ms9912 KiB
#define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> #include <unordered_map> #include <unordered_set> #define ll long long #define ld long double #define pl pair<ll, ll> #define vi vector<ll> #define vii vector<vi> #define vc vector<char> #define vcc vector<vc> #define vp vector<pl> #define mi map<ll,ll> #define mc map<char,int> #define sortx(X) sort(X.begin(),X.end()); #define all(X) X.begin(),X.end() #define allr(X) X.rbegin(),X.rend() #define ln '\n' #define YES {cout << "YES\n"; return;} #define NO {cout << "NO\n"; return;} #define MUN {cout << "-1\n"; return;} const int MODE = 1e9 + 7; using namespace std; vector<ll> getMedian(vector<pair<ll, pl>> &X) { priority_queue<ll> L; priority_queue<ll, vector<ll>, greater<ll>> R; ll l = 0, r = 0; vector<ll> res; for (auto [mid, p] : X) { vi NUM = {p.first, p.second}; for (auto x : NUM) { if (!L.empty() && x > L.top()) { R.push(x); r+=x; } else { L.push(x); l += x; } while (L.size() > R.size() + 1) { l -= L.top(); r += L.top(); R.push(L.top()); L.pop(); } while (R.size() > L.size()) { r -= R.top(); l += R.top(); L.push(R.top()); R.pop(); } } ll med = L.top(); ll re = med * L.size() - l; re += r - med * R.size(); res.push_back(re); } return (res); } void solve(int tc) { ll n, k; cin >> k >> n; ll sol = 0; vp X; for (int i = 0; i < n; i++) { char c1, c2; ll a, b; cin >> c1 >> a >> c2 >> b; if (a>b) swap(a, b); if (c1 == c2) sol += abs(a - b); else X.push_back({a, b}); } n = X.size(); vector<pair<ll, pl>> Y; for (int i = 0; i < n; i++) Y.push_back({X[i].first+X[i].second, X[i]}); sortx(Y); vi L = getMedian(Y); ll mn = INT64_MAX; if (L.empty()) mn = 0; else { if (k == 1) mn = L.back(); else { reverse(all(Y)); vi R = getMedian(Y); reverse(all(R)); for (int i = 0; i < R.size()-1; i++) mn = min(mn, L[i] + R[i + 1]); } } sol += mn + Y.size(); cout << sol << '\n'; } int main() { ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); int size = 1; // freopen("248.in", "r", stdin); // freopen("248.out", "w", stdout); // cin >> size; for (int i = 1; i <= size; i++) solve(i); }
#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...