Submission #1148848

#TimeUsernameProblemLanguageResultExecution timeMemory
1148848alir3za_zar3Palembang Bridges (APIO15_bridge)C++20
100 / 100
221 ms12056 KiB
// Alir3za.Zar3 -> Shiraz , Iran #include <bits/stdc++.h> using namespace std; #define int long long struct median { multiset<int> l,r; int szl=0 , szr=0; int sl=0 , sr=0; void update () { while (szl - szr > 1) { int v = *l.rbegin(); l.erase(l.lower_bound(v)); r.insert(v); szl--; szr++; sl -= v; sr += v; } while (!r.empty() and szr > szl) { int v = *r.begin(); r.erase(r.lower_bound(v)); l.insert(v); szr--; szl++; sr -= v; sl += v; } } int ouT () { if (l.empty()) return 0; int med = *l.rbegin(); int out = szl*med - sl; out += sr - szr*med; return out; } void insert (int v) { int med = (l.empty() ? 0:(*l.rbegin())); if (v > med) r.insert(v) , szr++ , sr+=v; else l.insert(v) , szl++ , sl+=v; update(); } void erase (int v) { int med = *l.rbegin(); if (v > med) r.erase(r.lower_bound(v)) , szr-- , sr-=v; else l.erase(l.lower_bound(v)) , szl-- , sl-=v; update(); } } l,r; signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int k,n; cin >> k >> n; int sv = n; vector<tuple<int,int,int>> q; for (int i=1; i<=n; i++) { char P,Q; int S,T; cin >> P >> S >> Q >> T; if (P == Q) sv += abs(T - S) - 1; else { q.push_back({S+T , S , T}); l.insert(S); l.insert(T); } } int out = l.ouT()+sv , o; if (k == 1) { cout << out << '\n'; return 0; } sort(q.begin(),q.end()); for (auto [sum,s,t] : q) { l.erase(s); l.erase(t); r.insert(s); r.insert(t); o = l.ouT()+r.ouT(); out = min(out,o+sv); } cout << out << '\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...