Submission #800415

#TimeUsernameProblemLanguageResultExecution timeMemory
800415antonPalembang Bridges (APIO15_bridge)C++17
100 / 100
129 ms14876 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 Lf; int s= 0; for(int i = 0; i<p; i++){ s+= Lf.insert(inters[i].first) + Lf.insert(inters[i].second); scores[i].first = s; } ////cout<<"right "<<endl; F Rf; s= 0LL; for(int i = p-1; i>=0; i--){ s += Rf.insert(inters[i].first) + Rf.insert(inters[i].second); scores[i].second = s; } int cost_cross= 1e18; for(int i = 0; i<p; i++){ //cout<<scores[i].first<<" "<<scores[i].second<<endl; cost_cross = min(cost_cross, scores[i].first + scores[i+1].second); } res+=p; if(p==0){ cout<<res<<endl; } else if(n==2){ cout<<res+cost_cross<<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...