Submission #1339886

#TimeUsernameProblemLanguageResultExecution timeMemory
1339886javkhlantogsPalembang Bridges (APIO15_bridge)C++20
100 / 100
57 ms9564 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct Median{
  priority_queue<ll> l;
  priority_queue<ll> r;
  ll sl=0,sr=0;
  void add(ll x){
    if(l.size()==0 or x<=l.top()){
    	l.push(x);
    	sl+=x;
    }
   		else{
				r.push(-x);
				sr+=x;
			}
    if(l.size()>r.size()+1){
			sr+=l.top();
			r.push(-l.top());
			sl-=l.top();
			l.pop();
		}
    	else if(r.size()>l.size()){
				sl+=-r.top();
				l.push(-r.top());
				sr-=-r.top();
				r.pop();
			}
  }
  ll get(){
		if(l.size()>r.size()) return sr-sl+l.top();
			else return sr-sl;
	} 
};
int main(void){
  ios::sync_with_stdio(0) ; cin.tie(0);
  ll k,n,i,j;
  cin>>k>>n;
  vector<char> p(n),q(n);
  vector<ll> s(n),t(n);
  vector<pair<ll,ll>> v;
  ll ans=0;
  for(i=0 ; i<n ; i++){
    cin>>p[i]>>s[i]>>q[i]>>t[i];
    if(p[i]==q[i]) ans+=abs(s[i]-t[i]);
    	else{
				v.push_back({s[i]+t[i],i});
				ans++;
			}
  }
  if(v.size()==0){
		cout<<ans<<"\n";
		return 0;
	}
  sort(v.begin(),v.end());
  ll sz=v.size();
  vector<ll> pre(sz);
  Median ml,mr;
  for(i=0 ; i<sz ; i++){
    ml.add(t[v[i].second]);
		ml.add(s[v[i].second]);
    pre[i]=ml.get();
  }
  if(k==1){
		cout<<ans+pre[sz-1]<<"\n";
		return 0;
	}
  ll val=pre[sz-1];
  for(i=sz-1 ; i>0 ; i--){
    mr.add(t[v[i].second]);
		mr.add(s[v[i].second]);
    val=min(val,pre[i-1]+mr.get());
  }
  cout<<ans+val<<"\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...