제출 #947341

#제출 시각아이디문제언어결과실행 시간메모리
947341amirhoseinfar1385Palembang Bridges (APIO15_bridge)C++17
100 / 100
152 ms8800 KiB
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
long long n,k,fakeres,ps[maxn],suf[maxn];
vector<pair<long long,long long>>all;

bool cmp(pair<long long,long long>a,pair<long long,long long>b){
	return a.first+a.second<b.first+b.second;
}

void vorod(){
	cin>>k>>n;
	for(long long i=0;i<n;i++){
		char c,cc;
		long long d,dd;
		cin>>c>>d>>cc>>dd;
		if(d>dd){
			swap(d,dd);
		}
		if(c==cc){
			fakeres+=abs(dd-d);
		}else{
			all.push_back(make_pair(d,dd));
			fakeres++;
		}
	}
	n=(long long)all.size();
}

priority_queue<long long>kam,ziad;
long long sumkam=0,sumziad=0;

void ins(int w){
	sumkam+=w;
	kam.push(w);
	while((int)kam.size()>(int)ziad.size()||kam.top()>-ziad.top()){
		sumkam-=kam.top();
		sumziad+=kam.top();
		ziad.push(-kam.top());
		kam.pop();
	}
	while((int)kam.size()<(int)ziad.size()||kam.top()>-ziad.top()){
		sumkam+=-ziad.top();
		sumziad-=-ziad.top();
		kam.push(-ziad.top());
		ziad.pop();
	}
	while((int)kam.size()>(int)ziad.size()||kam.top()>-ziad.top()){
		sumkam-=kam.top();
		sumziad+=kam.top();
		ziad.push(-kam.top());
		kam.pop();
	}
	while((int)kam.size()<(int)ziad.size()||kam.top()>-ziad.top()){
		sumkam+=-ziad.top();
		sumziad-=-ziad.top();
		kam.push(-ziad.top());
		ziad.pop();
	}
}

void pre(){
	sort(all.begin(),all.end(),cmp);
	for(long long i=0;i<n;i++){
		ins(all[i].first);
		ins(all[i].second);
		ps[i]=sumziad-sumkam;
	}
	while((long long)kam.size()>0){
		kam.pop();
		ziad.pop();
	}
	sumkam=0,sumziad=0;
	for(long long i=n-1;i>=0;i--){
		ins(all[i].first);
		ins(all[i].second);
		suf[i]=sumziad-sumkam;
	}
}

void solve(){
	if(k==1){
		long long mainres=fakeres+ps[n-1];
		cout<<mainres<<"\n";
		return ;
	}
	long long mainres=fakeres+suf[0];
	for(long long i=0;i<n;i++){
		mainres=min(mainres,fakeres+suf[i+1]+ps[i]);
	}
	cout<<mainres<<"\n";
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	//freopen("inp.txt","r",stdin);
	vorod();
	pre();
	solve();
}
#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...