Submission #827043

#TimeUsernameProblemLanguageResultExecution timeMemory
827043rinhoPalembang Bridges (APIO15_bridge)C++14
100 / 100
168 ms13580 KiB
#include <bits/stdc++.h> using namespace std; const int Nmax = 3e5; int n, k, len; long long ans = 0, suml = 0, sumr = 0, pre[Nmax + 3]; vector<pair<int, int>> val; multiset<int> up, down; bool cmp(pair<int, int> x, pair<int, int> y){ return x.first + x.second < y.first + y.second; } void ins(int x){ int med; if(down.size()) med = *down.rbegin(); else med = 1e9 + 7; if(med < x){ up.insert(x); sumr += 0ll + x; } else{ down.insert(x); suml += 0ll + x; } if(down.size() > up.size() + 1){ up.insert(*down.rbegin()); sumr += 0ll + *down.rbegin(); suml -= 0ll + *down.rbegin(); down.erase(down.find(*down.rbegin())); return; } if(up.size() > down.size()){ down.insert(*up.begin()); suml += 0ll + *up.begin(); sumr -= 0ll + *up.begin(); up.erase(up.find(*up.begin())); } } void in(){ cin >> k >> n; val.push_back({0, 0}); for(int i = 1; i <= n; i++){ char p, q; int s, t; cin >> p >> s >> q >> t; if(p == q) ans += 0ll + abs(s - t); else val.push_back({s, t}); } sort(val.begin(), val.end(), cmp); len = val.size() - 1; } void sol(){ ans += 0ll + len; for(int i = 1; i <= len; i++){ ins(val[i].first); ins(val[i].second); pre[i] = sumr - suml; } long long res = pre[len]; if(k == 2){ up.clear(); down.clear(); sumr = suml = 0; for(int i = len; i >= 1; i--){ ins(val[i].first); ins(val[i].second); res = min(res, sumr - suml + pre[i - 1]); } } cout << ans + res << '\n'; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); in(); sol(); 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...