Submission #114141

#TimeUsernameProblemLanguageResultExecution timeMemory
114141fedoseevtimofeyPalembang Bridges (APIO15_bridge)C++14
100 / 100
348 ms25572 KiB
#include <bits/stdc++.h> #define int long long using namespace std; typedef long long ll; typedef long double ld; struct triple { int a, b, c; bool operator <(const triple &other) const { return a < other.a; } }; struct median { multiset <int> a, b; ll sa, sb; void push(int x) { if (b.empty() || x >= *b.begin()) { b.insert(x); sb += x; } else { a.insert(x); sa += x; } while (a.size() > b.size()) { int c = *a.rbegin(); sa -= c; sb += c; a.erase(--a.end()); b.insert(c); } while (b.size() > a.size() + 1) { int c = *b.begin(); sb -= c; sa += c; b.erase(b.begin()); a.insert(c); } } ll get() { int m = *b.begin(); return (ll)m * a.size() - sa + sb - (ll)m * b.size(); } median() { sa = sb = 0; } }; signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.setf(ios::fixed); cout.precision(20); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int k, n; cin >> k >> n; if (k == 1) { ll res = 0; vector <int> a; for (int i = 0; i < n; ++i) { char p, q; int x, y; cin >> p >> x >> q >> y; if (p != q) { ++res; a.push_back(x); a.push_back(y); } else res += abs(x - y); } sort(a.begin(), a.end()); int x = a[(int)a.size() / 2]; for (auto y : a) res += abs(x - y); cout << res << '\n'; } else { ll res = 0; vector <triple> a; for (int i = 0; i < n; ++i) { char p, q; int x, y; cin >> p >> x >> q >> y; if (p != q) { ++res; a.push_back({x + y, x, y}); } else res += abs(x - y); } sort(a.begin(), a.end()); int m = a.size(); vector <ll> f(m + 1), s(m + 1); median P; for (int i = 0; i < m; ++i) { P.push(a[i].b); P.push(a[i].c); f[i + 1] = P.get(); } median S; for (int i = m - 1; i >= 0; --i) { S.push(a[i].b); S.push(a[i].c); s[i] = S.get(); } ll ans = 1e18; for (int i = 0; i < m + 1; ++i) ans = min(ans, res + f[i] + s[i]); cout << ans << '\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...