Submission #1156837

#TimeUsernameProblemLanguageResultExecution timeMemory
1156837Leonardo_PaesWiring (IOI17_wiring)C++20
13 / 100
22 ms4028 KiB
#include "wiring.h"
#include <bits/stdc++.h>
typedef long long ll;
#define ar array
using namespace std;
long long min_total_length(std::vector<int> r, std::vector<int> b) {
	queue<int> fila[2];
	int last[2] = {0, 0};
	vector<ar<int,2>> v;
	for(int x : r) v.push_back({x, 0});
	for(int x : b) v.push_back({x, 1});
	sort(v.begin(), v.end());
	long long ans = 0;
	for(auto [x, c] : v){
		if(!fila[!c].empty()){
			last[c] = x;
			last[!c] = fila[!c].front();
			fila[!c].pop();
			ans += x - last[!c];
		}
		else fila[c].push(x);
	}
	while(!fila[0].empty()){
		int x = fila[0].front();
		fila[0].pop();
		auto it = lower_bound(b.begin(), b.end(), x);
		int aux = 0x3f3f3f3f;
		if(it != b.end()) aux = min(aux, abs(x - *it));
		if(it != b.begin()) aux = min(aux, abs(x - *prev(it)));
		ans += aux;
	}
	while(!fila[1].empty()){
		int x = fila[1].front();
		fila[1].pop();
		auto it = lower_bound(r.begin(), r.end(), x);
		int aux = 0x3f3f3f3f;
		if(it != r.end()) aux = min(aux, abs(x - *it));
		if(it != r.begin()) aux = min(aux, abs(x - *prev(it)));
		ans += aux;
	}
	return ans;
}
#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...