1 #include<cstdio>
2 #include<algorithm>
3 #define inf 1000000000
4
5 using namespace std;
6
7 int n,ans=0,cnt=0,root;
8 int r1,r2;
9
10 struct tr{
11 int val,son[2],fat;
12 }tree[40000];
13
14 void getsmall(int node,int x)
15 {
16 if(!node) return;
17 if(tree[node].val>x) getsmall(tree[node].son[0],x);
18 else
19 {
20 r1=tree[node].val;
21 getsmall(tree[node].son[1],x);
22 }
23 }
24
25 void getbig(int node,int x)
26 {
27 if(!node) return;
28 if(tree[node].val<x) getbig(tree[node].son[1],x);
29 else
30 {
31 r2=tree[node].val;
32 getbig(tree[node].son[0],x);
33 }
34 }
35
36 void turn(int x,int &rt)
37 {
38 int y=tree[x].fat,z=tree[y].fat;
39 int l,r;
40 if(tree[y].son[0]==x) l=0;
41 else l=1;
42 r=l^1;
43
44 if(y==rt) rt=x;
45 else
46 {
47 if(y==tree[z].son[0]) tree[z].son[0]=x;
48 else tree[z].son[1]=x;
49 }
50 tree[x].fat=z; tree[y].fat=x; tree[tree[x].son[r]].fat=y;
51 tree[y].son[l]=tree[x].son[r]; tree[x].son[r]=y;
52 }
53
54 void splay(int &rt,int x)
55 {
56 int y,z;
57
58 while(rt!=x)
59 {
60 y=tree[x].fat;
61 z=tree[y].fat;
62
63 if(y!=rt)
64 {
65 if((tree[z].son[0]==y)^(tree[y].son[0]==x)) turn(x,rt);
66 else turn(y,rt);
67 }
68 turn(x,rt);
69 }
70 }
71
72 void ins(int &node,int val,int fat)
73 {
74 if(!node)
75 {
76 ++cnt;
77 node=cnt;
78 tree[node].val=val;
79 tree[node].fat=fat;
80 splay(root,node);
81 return;
82 }
83 if(val<tree[node].val) ins(tree[node].son[0],val,node);
84 else ins(tree[node].son[1],val,node);
85 }
86
87 int main()
88 {
89 scanf("%d",&n);
90
91 for(int i=0;i<n;i++)
92 {
93 int x;
94 if(scanf("%d",&x)==EOF) x=0;
95
96 r1=-inf;r2=inf;
97
98 getsmall(root,x);
99 getbig(root,x);
100
101 if(i) ans+=min(x-r1,r2-x);
102 else ans+=x;
103
104 ins(root,x,0);
105 }
106 printf("%d",ans);
107 return 0;
108 }