#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define overload4(_1, _2, _3, _4, name, ...) name #define rep0(a) for (ll _ = 0; _ < ll(a); ++_) #define rep1(i, n) for (ll i = 0; i < ll(n); ++i) #define rep2(i, s, n) for (ll i = ll(s); i < ll(n); ++i) #define rep3(i, s, n, d) for(ll i = ll(s); i < ll(n); i+=d) #define rep(...) overload4(__VA_ARGS__,rep3,rep2,rep1,rep0)(__VA_ARGS__) #define rrep0(a) for (ll _ = (a)-1; _ >= ll(0); -- _) #define rrep1(i, n) for (ll i = ll(n)-1; i >= 0; i--) #define rrep2(i, n, t) for (ll i = ll(n)-1; i >= (ll)t; i--) #define rrep3(i, n, t, d) for (ll i = ll(n)-1; i >= (ll)t; i-=d) #define drep(...) overload4(__VA_ARGS__,rrep3,rrep2,rrep1,rrep0)(__VA_ARGS__) typedef long long ll; typedef unsigned long long ull; typedef long double LD; typedef double D; typedef pair P; typedef map M; // /* #include using namespace atcoder; //using namespace internal; using mint =modint998244353; //using mint =modint1000000007; //using mint=static_modint<4649>; #define ip(x) atcoder::internal::is_prime_constexpr(x) istream &operator>>(istream &is, mint &a) { int v; cin >> v; a = v; return is; } ostream &operator<<(ostream &os, const mint &a) { return os << a.val(); } auto v_pow(ll n,ll base){vector v(n,1);rep(i,n-1){v[i+1]*=base*v[i];}return v;} // */ template istream &operator>>(istream &is, vector &v) { for (auto &e : v) is >> e; return is; } template ostream &operator<<(ostream &os, const vector &v) { for (auto &e : v) os << e << ' '; return os; } template istream &operator>>(istream &is, pair &p) { return is >> p.first >> p.second; } template ostream &operator<<(ostream &os, const pair &p) { return os << '{' << p.first << ", " << p.second << '}'; } template istream &operator>>(istream &is, tuple &t) { return is >> get<0>(t) >> get<1>(t) >> get<2>(t); } template ostream &operator<<(ostream &os, const tuple &t) {return os << '{' << get<0>(t) << ", " << get<1>(t) << ", " << get<2>(t) << '}';} #define YES(n) cout << ((n) ? "YES" : "NO" ) << endl #define Yes(n) cout << ((n) ? "Yes" : "No" ) << endl #define Game(n) cout << ((n) ? "First" : "Second" ) << endl template ll binary_search(F check,ll ok,ll ng,bool border= true) { /*binary_search(bool_func,okな値,ngな値)*///しっかり区間内に... if(border) assert(check(ok)); while(abs(ok-ng)>1){ auto x=(ng+ok)/2; tie(ok,ng)=(check(x)?make_pair(x, ng):make_pair(ok, x)); } return ok; } template double binary_search_real(F check,double ok,double ng,ll iter = 100) { rep(iter) { double x=(ok+ng)/2; tie(ok,ng)=(check(x)?make_pair(x,ng):make_pair(ok,x)); } return (ok+ng)/2; } void tatananonano() { ios::sync_with_stdio(false); std::cin.tie(nullptr); cout<< fixed << setprecision(10); } #define LL(...) ll __VA_ARGS__; IN(__VA_ARGS__) #define INT(...) int __VA_ARGS__; IN(__VA_ARGS__) #define STR(...) string __VA_ARGS__; IN(__VA_ARGS__) #define CHR(...) char __VA_ARGS__;IN(__VA_ARGS__) #define LDL(...) LD __VA_ARGS__;IN(__VA_ARGS__) #define DBL(...) double __VA_ARGS__;in(__VA_ARGS__) #define vv(type, name, h, ...) \ vector> name(h, vector(__VA_ARGS__)) #define vvv(type, name, h, w, ...) \ vector>> name( \ h, vector>(w, vector(__VA_ARGS__))) #define vvvv(type, name, a, b, c, ...) \ vector>>> name( \ a, vector>>( \ b, vector>(c, vector(__VA_ARGS__)))) //#define MINT(...) mint __VA_ARGS__;IN(__VA_ARGS__) template void scan(T &a) { cin >> a; } void IN() {} template void IN(Head &head, Tail &...tail) {scan(head);IN(tail...);} #define overload2(_1, _2, _3,name, ...) name #define out1(x) cout<,greater

>//小さい順 #define PQS PQ> #define fi first #define se second #define bit(n,k) ((n>>k)&1LL) #define popcount(n) __builtin_popcountll(n) template inline bool chmax(T& a,T b){if(a < b){a=b;return 1;}return 0;} template inline bool chmin(T& a,T b){if(a > b){a=b;return 1;}return 0;} template bool in_rect(T i,T j,T h,T w) {return 0 <= i and i < h and 0 <= j and j < w;} template bool IN(T x,T a,T b){return (a<=x and x vec; typedef vector vs; typedef vector mat; const ll mod = 998244353; //const ll mod = 1000000007; const auto INF = (1LL<<(60)); template T ceil(T x, U y) {return (x > 0 ? (x + y - 1) / y : x / y);} template T floor(T x, U y) {return (x > 0 ? x / y : (x - y + 1) / y);} template struct li_chao_tree{ struct line{ T a, b; line(): a(0), b(INF){} line(T a, T b): a(a), b(b){} T get(T x){ return a * x + b;} }; ll N; vector x; vector ST; li_chao_tree(){} li_chao_tree(const vector &x2){ x = x2; sort(x.begin(), x.end()); ll N2 = x.size(); N = 1; while (N < N2){ N *= 2;} x.resize(N); for (int i = N2; i < N; i++){ x[i] = x[N2 - 1];} ST = vector(N * 2 - 1); } void line_add(line L, ll i, ll l, ll r){ T la = L.get(x[l]); T lb = ST[i].get(x[l]); T ra = L.get(x[r - 1]); T rb = ST[i].get(x[r - 1]); if (la >= lb && ra >= rb){ return; } else if (la <= lb && ra <= rb){ ST[i] = L; } else { ll m = (l + r) / 2; T ma = L.get(x[m]); T mb = ST[i].get(x[m]); if (ma < mb){ swap(L, ST[i]); swap(la, lb); swap(ra, rb); } if (la < lb){ line_add(L, i * 2 + 1, l, m); } if (ra < rb){ line_add(L, i * 2 + 2, m, r);} } } void line_add(T a, T b){ line_add(line(a, b), 0, 0, N);} void segment_add(int L, int R, line S, ll i, ll l, ll r){ if (r <= L || R <= l){ return;} else if (L <= l && r <= R){line_add(S, i, l, r);} else { ll m = (l + r) / 2; segment_add(L, R, S, i * 2 + 1, l, m); segment_add(L, R, S, i * 2 + 2, m, r); } } void segment_add(T l, T r, T a, T b){ ll pl = lower_bound(x.begin(), x.end(), l) - x.begin(); ll pr = lower_bound(x.begin(), x.end(), r) - x.begin(); segment_add(pl, pr, line(a, b), 0, 0, N); } T get(T x2){ ll p = lower_bound(x.begin(), x.end(), x2) - x.begin(); p += N - 1; T ans = INF; ans = min(ans, ST[p].get(x2)); while (p > 0){ p = (p - 1) / 2; ans = min(ans, ST[p].get(x2)); } return ans; } }; int main(){ tatananonano(); LL(n); vec a(n); vec x(n); vec y(n); cin>>a; cin>>x; cin>>y; li_chao_tree li(a); vec dp(n+1,INF); dp[0]=0; rep(i,n){ li.line_add(-2*x[i],x[i]*x[i]+y[i]*y[i]+dp[i]); dp[i+1]=li.get(a[i])+a[i]*a[i]; } cout<