#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for (int i = a; i <= b; i++)
#define per(i,a,b) for (int i = a; i >= b; i--)
#define pii pair<int,int>
#define fi first
#define se second
const int MAXN = 1e5+10;
const int INF = 1e9+67;
int h[MAXN],w[MAXN], dp[MAXN];
set<pii> cht;
int query(int x) {
int i = prev(cht.upper_bound({x,INF}))->se;
return dp[i] -2*h[i]*x;
}
void add(int i) {
// dp[i] + -2*h[i]*x
auto ts = [&](int lo, int hi) {
while (lo<=hi) {
int mid = (hi-lo)/2 + lo;
int x = -2*mid*h[i] + dp[i];
int d1 = x-query(mid), d2 = x-query(mid+1)-2*h[i];
if(d1 <= 0) return mid;
if(d2<d1) {
lo = mid+1;
} else {
hi = mid-1;
}
}
return INF;
};
auto bs = [&](int lo, int hi, int dir = 1) {
int res=hi;
while (lo<=hi) {
int mid = (hi-lo)/2 + lo;
if(-2*h[i]*mid + dp[i] <= query(mid)) {
if(dir==1) hi = mid-1;
else lo = mid+1;
res = mid;
} else {
if(dir==1) lo = mid+1;
else hi = mid-1;
}
}
return res;
};
int bp = ts(-INF,INF);
if(bp==INF) return;
int pi = bs(-INF,bp);
int pj = bs(bp,INF,-1);
int lst = -1;
auto pt = cht.lower_bound({pi,0});
while (pt!=cht.end() && pt->se <= pj) {
lst = pt->se;
cht.erase(pt);
pt = cht.lower_bound({pi,0});
}
cht.insert({pi,i});
if(lst != -1 && query(pj+1) > -2*(pj+1)*h[lst] + dp[lst]) cht.insert({pj+1,lst});
}
int32_t main() {
ios_base::sync_with_stdio(0);cin.tie(nullptr);
int n; cin >> n;
rep(i,1,n) cin >> h[i];
rep(i,1,n) cin >> w[i];
dp[1] = -w[1]+2*h[1]*h[1];
cht.insert((pii){-INF, 1});
rep(i,2,n) {
dp[i] = query(h[i]) -w[i]+2*h[i]*h[i];
add(i);
}
int sw = 0;
rep(i,1,n) sw+=w[i];
cout << dp[n] - h[1]*h[1] - h[n]*h[n] + sw;
}