Submission #1357844

#TimeUsernameProblemLanguageResultExecution timeMemory
1357844warrennWiring (IOI17_wiring)C++20
100 / 100
40 ms10804 KiB
#include "wiring.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long 


const ll maxn=2e5;
ll dp[maxn+100],pref[maxn+100];

ll min_total_length(vector<int> r, vector<int> b) {
	vector<pair<ll,ll> >isi;
	vector<ll> wrn[2];

	for(ll q=0;q<r.size();q++){
		isi.push_back({r[q],0}); wrn[0].push_back(r[q]);
	}
	for(ll q=0;q<b.size();q++){
		isi.push_back({b[q],1}); wrn[1].push_back(b[q]);
	}
	isi.push_back({-1,0});
	sort(isi.begin(),isi.end());
	for(ll q=1;q<isi.size();q++){
		pref[q]=pref[q-1];
		if(isi[q].second==0)pref[q]-=isi[q].first;
		else pref[q]+=isi[q].first;
	}

	ll lst=0;

	for(ll q=1;q<isi.size();q++){
		dp[q]=1e18;

		auto[idx,col]=isi[q];
		//cout<<q<<' ';
		ll it=lower_bound(wrn[1-col].begin(),wrn[1-col].end(),idx)-wrn[1-col].begin();
		//cout<<it<<endl;
		if(it!=wrn[1-col].size()){
			dp[q]=min(dp[q],dp[q-1]+abs(idx-wrn[1-col][it]));
		}
		it--;
		if(it>=0){
			dp[q]=min(dp[q],dp[q-1]+abs(idx-wrn[1-col][it]));
		}
		//cout<<q<<' '<<dp[q]<<endl;
		

		if(q==1)continue;
		if(isi[q].second!=isi[q-1].second){
			lst=q-1;
			dp[q]=min(dp[q],dp[lst-1]+(isi[q].first-isi[q-1].first));
		}
		else{
			if(lst>=2 && isi[lst-1].second==1-isi[q].second){
				//if(q==6)cout<<pref[lst-2]<<"K"<<endl;
				lst--;
				dp[q]=min(dp[q],dp[lst-1]+abs(pref[q]-pref[lst-1]));
			}
		}
		//cout<<dp[q]<<endl;
	}
	return dp[isi.size()-1];
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...