Submission #1132163

#TimeUsernameProblemLanguageResultExecution timeMemory
1132163biankPalembang Bridges (APIO15_bridge)C++20
100 / 100
151 ms12172 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i,n) for(int i=0;i<int(n);i++) #define forsn(i,s,n) for(int i=int(s);i<int(n);i++) #define dforn(i,n) for(int i=int(n)-1;i>=0;i--) #define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--) #define sz(c) int((c).size()) #define all(c) begin(c), end(c) typedef long long ll; typedef vector<int> vi; typedef pair<int,int> ii; #define fst first #define snd second const ll INF=1e18; struct Median{ multiset<int> l,r; ll lsum,rsum; Median(){ l.clear(),r.clear(); lsum=0,rsum=0; } void balance(){ if(sz(l)>sz(r)+1){ rsum+=*l.rbegin(); lsum-=*l.rbegin(); r.insert(*l.rbegin()); l.erase(prev(end(l))); } if(sz(r)>sz(l)){ rsum-=*begin(r); lsum+=*begin(r); l.insert(*begin(r)); r.erase(begin(r)); } } int getMedian(){ return *l.rbegin(); } void add(int x){ if(l.empty()||x<getMedian()){ lsum+=x,l.insert(x); }else{ rsum+=x,r.insert(x); } balance(); } void erase(int x){ auto it=r.find(x); if(it!=end(r)){ rsum-=x,r.erase(it); }else{ lsum-=x,l.erase(l.find(x)); } balance(); } ll getCost(){ return rsum-lsum+(sz(r)-sz(l))*getMedian(); } }; int main(){ ios::sync_with_stdio(0); cin.tie(0); int k,n; cin>>k>>n; vector<ii> pos; ll res=0; forn(i,n){ char p,q; int s,t; cin>>p>>s>>q>>t; if(p==q) res+=abs(s-t); else pos.emplace_back(s,t); } int m=sz(pos); res+=m; sort(all(pos),[&](const ii &lhs, const ii &rhs){ return lhs.fst+lhs.snd<rhs.fst+rhs.snd; }); vector<ll> pref(m+1,0); Median ds; forn(i,m){ ds.add(pos[i].fst),ds.add(pos[i].snd); pref[i+1]=ds.getCost(); } if(k==1){ res+=pref[m]; }else{ ds=Median(); vector<ll> suff(m+1,0); dforn(i,m){ ds.add(pos[i].fst),ds.add(pos[i].snd); suff[i]=ds.getCost(); } ll mini=INF; forn(i,m+1) mini=min(mini,pref[i]+suff[i]); res+=mini; } cout<<res<<'\n'; 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...