Submission #390788

#TimeUsernameProblemLanguageResultExecution timeMemory
390788alishahali1382Wiring (IOI17_wiring)C++14
100 / 100
54 ms10948 KiB
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
#define debug(x) {cerr<<#x<<"="<<x<<"\n";}
#define debug2(x, y) {cerr<<#x<<", "<<#y<<" = "<<x<<", "<<y<<"\n";}
#define pb push_back
#define all(x) x.begin(), x.end()

const int inf=1000000100;
const int MAXN=200010;

int n, m, k;
pii A[MAXN];
int prv[MAXN], nxt[MAXN];
int val[MAXN];
ll dp[MAXN], ps[MAXN];

ll min_total_length(vector<int> R, vector<int> B){
	for (int x:R) A[++n]={x, 0};
	for (int x:B) A[++n]={x, 1};
	sort(A+1, A+n+1);
	for (int i=2; i<=n; i++){
		if (A[i].second==A[i-1].second) prv[i]=prv[i-1];
		else prv[i]=i-1;
	}
	for (int i=n-1; i; i--){
		if (A[i].second==A[i+1].second) nxt[i]=nxt[i+1];
		else nxt[i]=i+1;
	}
	for (int i=1; i<=n; i++){
		ps[i]=ps[i-1]+A[i].first;
		val[i]=min((prv[i]?A[i].first-A[prv[i]].first:inf), (nxt[i]?A[nxt[i]].first-A[i].first:inf));
		// debug2(i, val[i])
	}
	for (int i=1; i<=n; i++){
		dp[i]=dp[i-1]+val[i];
		if (!prv[i]) continue ;
		int ted=i-prv[i];
		if (prv[i]-prv[prv[i]]>=ted)
			dp[i]=min(dp[i], dp[i-2*ted] + ps[i]-2*ps[i-ted]+ps[i-2*ted]);
		// debug2(i, dp[i])
	}
	return dp[n];
}
#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...