Submission #1179268

#TimeUsernameProblemLanguageResultExecution timeMemory
1179268alexander707070Palembang Bridges (APIO15_bridge)C++20
100 / 100
59 ms4804 KiB
#include<bits/stdc++.h> #define MAXN 100007 using namespace std; const int inf=1e9+7; const long long inff=1e17; struct house{ int x,y; inline friend bool operator < (house fr,house sc){ return fr.x+fr.y < sc.x+sc.y; } }; struct median{ priority_queue<int> l; priority_queue<int,vector<int>, greater<int> > r; long long sumL,sumR; void init(){ l.push(-1); r.push(inf); } void balance(){ if(r.size()>=l.size()){ sumR-=r.top(); sumL+=r.top(); l.push(r.top()); r.pop(); } if(l.size()>r.size()+1){ sumL-=l.top(); sumR+=l.top(); r.push(l.top()); l.pop(); } } void add(int x){ if(x<=l.top()){ sumL+=x; l.push(x); }else{ r.push(x); sumR+=x; } balance(); } long long calc(){ long long lt=int(l.size())-1,rt=int(r.size())-1; return (long long) lt*l.top()-sumL + sumR-rt*l.top(); } }pref,suff; int n,k,x,y,m,p,q; long long ans,toadd; long long costpref[MAXN],costsuff[MAXN]; char s,t; house h[MAXN]; void solve_easy(){ pref.init(); for(int i=1;i<=m;i++){ pref.add(h[i].x); pref.add(h[i].y); } ans+=pref.calc()+m; cout<<ans<<"\n"; } void solve_hard(){ if(m==0){ cout<<ans<<"\n"; return; } pref.init(); suff.init(); for(int i=1;i<=m;i++){ pref.add(h[i].x); pref.add(h[i].y); costpref[i]=pref.calc(); } for(int i=m;i>=1;i--){ suff.add(h[i].x); suff.add(h[i].y); costsuff[i]=suff.calc(); } long long best=inff; for(int i=0;i<=m;i++){ best=min(best,costpref[i]+costsuff[i+1]); } ans+=best+m; cout<<ans<<"\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>k>>n; for(int i=1;i<=n;i++){ cin>>s>>x>>t>>y; if(s==t){ ans+=abs(x-y); continue; } m++; h[m]={x,y}; } sort(h+1,h+m+1); if(k==1){ solve_easy(); }else{ solve_hard(); } 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...