#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
#define sz(a) int(a.size())
#define f(i, a, b) for (int i = a; i < b; i++)
#define rep(i, a) f(i, 0, a)
#define int ll
#define tv(a, x) for (auto& a : x)
#define DUZO 1000000000000000000LL
#define en "\n"
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;
using vii = vector<pii>;
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
#define sz(a) int(a.size())
#define f(i, a, b) for (int i = a; i < b; i++)
#define rep(i, a) f(i, 0, a)
#define int ll
#define tv(a, x) for (auto& a : x)
#define DUZO 1000000000000000000LL
#define en "\n"
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;
using vii = vector<pii>;
const int MAXH = 1000000;
struct linia {
int a, b;
int zcz(int x) {return a * x + b;}
};
vector<linia> tr(MAXH * 4);
vi ma_linie(MAXH * 4, 0);
void add(int v, int l, int r, linia nw) {
if (!ma_linie[v]) {
tr[v] = nw;
ma_linie[v] = 1;
return;
}
int mid = (l + r)/2;
bool le = nw.zcz(l) < tr[v].zcz(l);
bool sr = nw.zcz(mid) < tr[v].zcz(mid);
if (sr) swap(tr[v], nw);
if (l == r) return;
if (le == sr) add(v * 2 + 1, mid + 1, r, nw);
else add(v * 2, l, mid, nw);
}
int query(int v, int l, int r, int x) {
if (!ma_linie[v]) return DUZO;
int val = tr[v].zcz(x);
if (l == r) return val;
int mid = (l + r)/2;
if (mid >= x) return min(val, query(v * 2, l, mid, x));
else return min(val, query(v * 2 + 1, mid + 1, r, x));
}
vi h;
vi w;
vi pref;
vi dp;
pii obl(int ind) {
return {h[ind] * h[ind] - pref[ind] + dp[ind], -2*h[ind]};
}
void solve() {
int n;
cin >> n;
h.resize(n);
w.resize(n);
f(i, 0, n) cin >> h[i];
f(i, 0, n) cin >> w[i];
w[0] = w.back() = 0;
pref.resize(n);
pref[0] = w[0];
f(i, 1, n) pref[i] = pref[i - 1] + w[i];
dp.resize(n);
dp[0] = 0;
pii p1 = obl(0);
add(1, 0, MAXH, {p1.nd, p1.st});
f(i, 1, n) {
dp[i] = h[i] * h[i] + pref[i - 1] + query(1, 0, MAXH, h[i]);
pii p1 = obl(i);
add(1, 0, MAXH, {p1.nd, p1.st});
}
cout << dp.back() << en;
}
int32_t main() {
ios::sync_with_stdio(0);
cin.tie(0);
int q = 1;
//cin >> q;
while (q--) {
solve();
}
return 0;
}