// Starcraft 2 enjoyer //
#include <bits/stdc++.h>
// #pragma GCC target("avx2")
// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")
using namespace std;
#define LSOne(X) ((X) & -(X))
const int N = 4e5 + 5;
const int M = 1e6 + 5;
const int K = 20;
const int LG = 20;
const long long INF = 1e18 + 5;
const int C = 26;
const int B = 1000;
const int MOD = 998244353;
int last[2][N], nxt[2][N], l[2], lev[N], cur;
long long s[N], dp[N];
long long min_total_length(vector<int> r, vector<int> b)
{
int n = r.size(), m = b.size();
vector<pair<int, int>> v;
for (int i : r)
{
v.push_back({i, 0});
}
for (int i : b)
{
v.push_back({i, 1});
}
sort(v.begin(), v.end());
l[0] = l[1] = -1;
for (int x = 1; x <= n + m; x++)
{
last[0][x] = l[0];
last[1][x] = l[1];
l[v[x - 1].second] = v[x - 1].first;
}
l[0] = l[1] = -1;
for (int x = n + m; x >= 1; x--)
{
nxt[0][x] = l[0];
nxt[1][x] = l[1];
l[v[x - 1].second] = v[x - 1].first;
}
cur = n + m;
memset(lev, -1, sizeof(lev));
lev[n + m] = 0;
s[0] = 0;
// for (int x = 1; x <= n + m; x++)
// {
// cout << last[0][x] << " " << last[1][x] << " " << nxt[0][x] << " " << nxt[1][x] << " " << x << "\n";
// }
for (int x = 1; x <= n + m; x++)
{
dp[x] = INF;
auto [p, t] = v[x - 1];
s[x] = s[x - 1];
if (t == 1)
{
cur++;
s[x] += p;
}
else
{
cur--;
s[x] -= p;
}
if (last[!t][x] != -1)
{
dp[x] = min(dp[x], dp[x - 1] + p - last[!t][x]);
}
if (nxt[!t][x] != -1)
{
dp[x] = min(dp[x], dp[x - 1] + nxt[!t][x] - p);
}
if (lev[cur] != -1)
{
dp[x] = min(dp[x], dp[lev[cur]] + abs(s[x] - s[lev[cur]]));
}
lev[cur] = x;
// cout << dp[x] << " " << x << "\n";
}
return dp[n + m];
}