#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e6 + 5;
ll n, sum, a, idx, root;
ll l[N], r[N], sz[N], val[N], key[N];
ll New(ll v)
{
idx++;
sz[idx] = 1;
val[idx] = v;
key[idx] = rand();
return idx;
}
void Update(ll u)
{
sz[u] = sz[l[u]] + sz[r[u]] + 1;
return;
}
void Split(ll u, ll v, ll &x, ll &y)
{
if (!u)
{
x = y = 0;
return;
}
if (val[u] <= v)
{
x = u;
Split(r[u], v, r[u], y);
}
else
{
y = u;
Split(l[u], v, x, l[u]);
}
Update(u);
return;
}
ll Merge(ll x, ll y)
{
if (!x || !y)
return x | y;
if (key[x] < key[y])
{
r[x] = Merge(r[x], y);
Update(x);
return x;
}
else
{
l[y] = Merge(x, l[y]);
Update(y);
return y;
}
}
void Insert(ll v)
{
ll x, y, z;
z = New(v);
Split(root, v, x, y);
root = Merge(Merge(x, z), y);
return;
}
ll K_th(ll u, ll k)
{
if (!u)
return 1;
if (sz[l[u]] + 1 == k)
return u;
if (k <= sz[l[u]])
return K_th(l[u], k);
return K_th(r[u], k - sz[l[u]] - 1);
}
ll Pre(ll v)
{
ll x, y, ans;
Split(root, v - 1, x, y);
ans = val[K_th(x, sz[x])];
root = Merge(x, y);
return ans;
}
ll Suc(ll v)
{
ll x, y, ans;
Split(root, v, x, y);
ans = val[K_th(y, 1)];
root = Merge(x, y);
return ans;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a;
if (i == 1) {
sum = a;
} else {
sum += min( abs(a - Pre(a)),
abs(a - Suc(a)));
}
Insert(a);
}
cout << sum << '\n';
return 0;
}