제출 #1339666

#제출 시각아이디문제언어결과실행 시간메모리
1339666javkhlantogsPalembang Bridges (APIO15_bridge)C++20
22 / 100
267 ms38156 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(void){
	ios::sync_with_stdio(0); cin.tie(0);
	ll k,n,i,j;
	cin>>k>>n;
	vector<ll> s(n),t(n);
	vector<char> p(n),q(n);
	vector<vector<ll>> pos;
	ll ans=0,val=1e18,cnt=0;
	map<ll,ll> mp,mp1;
	for(i=0 ; i<n ; i++){
		cin>>p[i]>>s[i]>>q[i]>>t[i];
		if(p[i]==q[i]){
			cnt++;
			ans+=abs(s[i]-t[i]);
			continue;
		}
		pos.push_back({s[i],i,0});
		pos.push_back({t[i],i,1});
		mp[s[i]]++;
		mp[t[i]]++;
	}
	ll x=0,y,last=0;
	for(auto v:mp){
		y=v.second;
		if(x!=0) mp1[v.first]=x;
		if(x!=0) mp[v.first]=v.first-last;
		x+=y;
		last=v.first;
	}
	sort(pos.begin(),pos.end());
	if(k==1){
		if(cnt==n) val=0;
		ll valtmp=0,brpos;
		if(pos.size()) brpos=pos[0][0];
		for(auto v:pos){
			if(v[2]==0) valtmp+=abs(brpos-v[0])+abs(brpos-t[v[1]])+1;
		}
		val=min(val,valtmp);
		for(auto v:mp1){
			valtmp+=v.second*mp[v.first];
			valtmp-=(pos.size()-v.second)*mp[v.first];
			val=min(val,valtmp);
		}
		ans+=val;
		cout<<ans<<"\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...