Submission #1153065

#TimeUsernameProblemLanguageResultExecution timeMemory
1153065antonPalembang Bridges (APIO15_bridge)C++17
22 / 100
112 ms12160 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int, int> int n,k, res; struct F{ priority_queue<int> L; priority_queue<int> R; int opti =0; int insert(int v){ int ans =0; if(v>opti){ R.push(-v); R.push(-v); ans = (abs(-v - (R.top()))); L.push(-R.top()); R.pop(); } else{ L.push(v); L.push(v); ans = (abs(v - (L.top()))); R.push(-L.top()); L.pop(); } opti = L.top(); return ans; } }; signed main(){ cin>>n>>k; vector<pii> inters; for(int i = 0; i<k; i++){ char a, b; int pa, pb; cin>>a>>pa>>b>>pb; if(pa>pb){ swap(pa, pb); } //cout<<a<<" "<<b<<endl; if(a!=b){ inters.push_back(pii(pa, pb)); } else{ res += abs(pb-pa); } } //cout<<"done "<<inters.size()<<endl; auto cmp =[&](pii& a, pii& b){ return a.first+a.second<b.first+b.second; }; sort(inters.begin(), inters.end(), cmp); int p = inters.size(); vector<pii> scores(p+1, pii(0, 0)); F L; int s= 0; for(int i = 0; i<p; i++){ s+= L.insert(inters[i].first) + L.insert(inters[i].second); scores[i].first = s; } //cout<<"right "<<endl; F R; s= 0; for(int i = p-1; i>=0; i--){ s += R.insert(inters[i].first) + R.insert(inters[i].second); scores[i].second = s; } int cost_cross= 1e18; for(int i = 0; i<p; i++){ cost_cross = min(cost_cross, scores[i].first + scores[i+1].second); } res+=p; if(n==2){ cout<<res+cost_cross<<endl; } else if(p==0){ cout<<res<<endl; } else{ cout<<scores[p-1].first +res<<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...