제출 #1281460

#제출 시각아이디문제언어결과실행 시간메모리
1281460Jawad_Akbar_JJPalembang Bridges (APIO15_bridge)C++20
22 / 100
94 ms5668 KiB
#include <iostream> #include <queue> #include <algorithm> using namespace std; #define int long long const int N = 100005, K = 700; priority_queue<int> pQ, dm1; priority_queue<int, vector<int>, greater<int>> Pq, dm2; int Sum1, Sum2, pre[N]; int insert(int l, int r){ pQ.push(l); Pq.push(r); Sum2 += r, Sum1 += l; while (Pq.top() < pQ.top()){ int k1 = pQ.top(), k2 = Pq.top(); pQ.pop(), Pq.pop(); Sum1 += -k1 + k2, Sum2 += -k2 + k1; Pq.push(k1), pQ.push(k2); } return Sum2 - Sum1; } signed main(){ int k, n, Ans = 0, Ans1 = 1e17; cin>>k>>n; vector<pair<int,int>> vec; for (int i=1;i<=n;i++){ char a, c; int b, d; cin>>a>>b>>c>>d; if (b >= d) swap(b, d); if (a == c) Ans += d - b; else{ vec.push_back({b + d, b}); Ans++; } } sort(begin(vec), end(vec)); n = vec.size(); for (int i=0;i<n;i++) pre[i] = insert(vec[i].second, vec[i].first - vec[i].second); if (k == 1) return cout<<pre[n-1] + Ans<<'\n', 0; pQ = dm1; Pq = dm2; Sum1 = Sum2 = 0; for (int i=n-1;i>=0;i--) Ans1 = min(Ans1, Ans + insert(vec[i].second, vec[i].first - vec[i].second) + (i == 0 ? 0 : pre[i-1])); cout<<Ans1<<endl; }
#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...