type arr=record w,f:longint; a:array[0..1]of longint; end; var a:array[1..1000000]of longint; tree:array[0..1000000]of arr; tot,n,i,root,ans:longint; flag:boolean; function minnum(a,b:longint):longint; begin if a<b then exit(a) else exit(b) end; procedure rotate(x,p:longint); var k:longint; begin k:=tree[x].f; if tree[tree[k].f].a[0]=k then tree[tree[k].f].a[0]:=x else tree[tree[k].f].a[1]:=x; tree[x].f:=tree[k].f; tree[k].a[1-p]:=tree[x].a[p]; tree[tree[x].a[p]].f:=k; tree[k].f:=x; tree[x].a[p]:=k; end; procedure splay(x:longint); var p1,p2,y:longint; begin while tree[x].f<>0 do begin y:=tree[x].f; if x=tree[y].a[0] then p1:=0 else p1:=1; if y=tree[tree[y].f].a[0] then p2:=0 else p2:=1; if tree[y].f=0 then rotate(x,1-p1) else if p1=p2 then begin rotate(y,1-p1); rotate(x,1-p1) end else begin rotate(x,1-p1);rotate(x,1-p2) end; end; root:=x; end; procedure insert(x,k:longint); var sign:integer; begin if tree[k].w=x then begin flag:=false; exit end; if x<tree[k].w then sign:=0 else sign:=1; if tree[k].a[sign]<>0 then insert(x,tree[k].a[sign]) else begin inc(tot);tree[tot].f:=k; tree[tot].w:=x;tree[k].a[sign]:=tot; splay(tot); end; end; function find(x:longint):longint; var k:longint; begin k:=tree[x].a[0]; if k<>0 then begin while tree[k].a[1]<>0 do k:=tree[k].a[1]; find:=abs(tree[k].w-tree[x].w) end else find:=maxlongint; k:=tree[x].a[1]; if k<>0 then begin while tree[k].a[0]<>0 do k:=tree[k].a[0]; find:=minnum(find,abs(tree[k].w-tree[x].w)) end; end; begin assign(input,'/home/hxc/input');reset(input); assign(output,'/home/hxc/output');rewrite(output); readln(n); tot:=0; for i:=1 to n do begin readln(a[i]); flag:=true; insert(a[i],root); if flag=false then continue; if i<>1 then inc(ans,find(tot)) else inc(ans,a[1]); end; writeln(ans); close(input);close(output); end.