Submission #1201676

#TimeUsernameProblemLanguageResultExecution timeMemory
1201676hackstarPalembang Bridges (APIO15_bridge)C++17
100 / 100
172 ms20800 KiB
#include <algorithm> #include <iostream> #include <vector> #include <set> using namespace std; using ll = long long; struct median{ multiset<int, greater<int> > low; multiset<int> high; ll sum_low = 0, sum_hight = 0; void add(int x){ if(low.empty() || *low.begin() > x){ low.insert(x); sum_low += x; } else{ high.insert(x); sum_hight += x; } while(low.size() > high.size() + 1){ int v = *low.begin(); low.erase(low.begin()); high.insert(v); sum_low -= v; sum_hight += v; } while(low.size() < high.size()){ int v = *high.begin(); high.erase(high.begin()); low.insert(v); sum_low += v; sum_hight -= v; } } ll sum_median(){ return low.empty() ? 0 : 1LL * *low.begin() * low.size() - sum_low + sum_hight - 1LL * *low.begin() * high.size(); } }; int main(){ cin.tie(nullptr)->sync_with_stdio(false); int n, k; cin >> k >> n; vector<pair<int, int> > a; ll temp = 0, res = 0; char c1, c2; for(int i = 0, s, f; i < n; ++ i){ cin >> c1 >> s >> c2 >> f; if(s > f) swap(s, f); if(c1 == c2) temp += f - s; else{ temp ++; a.emplace_back(s, f); } } n = (int)a.size(); if(n == 0){ cout << temp; return 0; } sort(a.begin(), a.end(), [&](pair<int, int>r, pair<int,int>l){return r.first + r.second < l.first + l.second;}); vector<ll> pref(n); median md; for(int i = 0; i < n; ++ i){ md.add(a[i].first); md.add(a[i].second); pref[i] = md.sum_median(); } res = pref.back(); if(k == 2){ median dm; for(int i = n - 1; i > 0; -- i){ dm.add(a[i].first); dm.add(a[i].second); res = min(res, dm.sum_median() + pref[i-1]); } } res += temp; cout << res; 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...