제출 #1180993

#제출 시각아이디문제언어결과실행 시간메모리
1180993petezaPalembang Bridges (APIO15_bridge)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int k, q, a, b; char A, B; ll sum=0, ans=0; priority_queue<int> l; priority_queue<int, vector<int>, greater<int>> r; map<int, vector<int>> mp; map<int, ll> cans; void upd(int pos) { if(l.empty()) { l.push(pos); r.push(pos); return; } if(pos < l.top()) { sum += l.top()-pos; l.push(pos); l.push(pos); r.push(l.top()); l.pop(); } else if(pos > r.top()) { sum += pos-r.top(); r.push(pos); r.push(pos); l.push(r.top()); r.pop(); } else { l.push(pos); r.push(pos); } } int main() { cin.tie(0) -> sync_with_stdio(0); cin >> k >> q; while(q--) { cin >> A >> a >> B >> b; if(a>b) swap(a, b); if(A==B) { ans += b-a; } else { ans++; mp[a].push_back(b); } } ll minminmin = LLONG_MAX; vector<int> revmap; for(auto &e:mp) { revmap.push_back(e.first); for(auto &E:e.second) { upd(e.first); upd(E); } cans[e.first] = sum; minminmin = sum; } reverse(revmap.begin(), revmap.end()); sum=0; while(!l.empty()) l.pop(); while(!r.empty()) r.pop(); for(auto &e:revmap) { auto &vec = mp[e]; if(k==2) minminmin = min(minminmin, cans[e]+sum); for(auto &E:vec) { upd(e); upd(E); } } cout << ans+minminmin; }
#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...