program wuzhong;
var n:longint;
m,w:array[1..400000]of int64;
procedure init;
var i:longint;
begin
read(n);
for i:=1 to n do read(m[i]);
for i:=1 to n do read(w[i]);
if n=1 then begin write(0);halt;end;
if n=2 then begin write(abs(w[2]-w[1]));halt;end;
end;
procedure qsort(l,r:longint);
var i,j,x,y:longint;
begin
i:=l;j:=r;
x:=w[(l+r)shr 1];
repeat
while w[i]<x do inc(i);
while w[j]>x do dec(j);
if i<=j then begin
y:=w[i];w[i]:=w[j];w[j]:=y;
inc(i);dec(j);end;
until i>j;
if i<r then qsort(i,r);
if j>l then qsort(l,j);
end;
procedure main;
var i:longint;
min,max:longint;
ans:int64;
begin
min:=0;max:=0;
if m[1]<m[2] then inc(min)
else inc(max);
if m[n]<m[n-1] then inc(min)
else inc(max);
for i:=2 to n-1 do
begin
if (m[i]>m[i-1])and(m[i]>m[i+1]) then inc(max);
if (m[i]<m[i-1])and(m[i]<m[i+1]) then inc(min);
end;
qsort(1,n);
ans:=0;
for i:=n downto n-max+1 do ans:=ans+w[i]*2;
for i:=1 to min do ans:=ans-w[i]*2;
if m[1]<m[2] then ans:=ans+w[min]
else ans:=ans-w[n-max+1];
if m[n]<m[n-1] then
if m[1]<m[2] then inc(ans,w[min-1])
else inc(ans,w[min])
else
if m[1]<m[2] then dec(ans,w[n-max+1])
else dec(ans,w[n-max+2]);
write(ans);
end;
begin
init;
main;
end.
评论