#include<bits/stdc++.h>
#define maxn 33010
#define INF 0x3f3f3f3f
using namespace std;
struct node
{
int f,son[2],date;
}t[maxn];
int root,cnt;
inline int read()
{
int f=1;
int x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*=f;
}
void rotate(int x)
{
int y=t[x].f,z=t[y].f,kk=t[y].son[1]==x,cd=t[x].son[kk^1];
if(z) t[z].son[t[z].son[1]==y]=x;
t[x].f=z; t[cd].f=y;
t[y].son[kk]=cd; t[x].son[kk^1]=y;
t[y].f=x;
return ;
}
void splay(int x)
{
while(t[x].f)
{
int y=t[x].f,z=t[y].f;
if(z) (t[z].son[1]==y)^(t[y].son[1]==x)?rotate(x):rotate(y);
rotate(x);
}
root=x;
return ;
}
void insert(int val)
{
int ff=0,x=root;
while(x) ff=x,x=t[x].date>val?t[x].son[0]:t[x].son[1];
if(t[ff].date==val) return;
x=++cnt;
if(ff) t[ff].son[t[ff].date<val]=x;
t[x].f=ff;
t[x].date=val;
splay(x);
return;
}
int getmin(int x,int val)
{
if(!x) return INF;
return t[x].date>=val?min(t[x].date,getmin(t[x].son[0],val)):getmin(t[x].son[1],val);
}
int getmax(int x,int val)
{
if(!x) return -INF;
return t[x].date<=val?max(t[x].date,getmax(t[x].son[1],val)):getmax(t[x].son[0],val);
}
int main()
{
int n,x,ans=0;
n=read();
for(int i=1;i<=n;++i)
{
x=read();
if(i==1) ans+=x;
else ans+=min(x-getmax(root,x),getmin(root,x)-x);
insert(x);
}
printf("%d\n",ans);
return 0;
}