#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define l(a, b, i) for (ll i = a; i < b; i++)
#define rl(a, b, i) for (ll i = a; i >= b; i--)
#define vpair vector<pair<ll, ll>>
#define inf LLONG_MAX
#define ninf LLONG_MIN
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ll N, A; cin >> N; vector<pair<ll, ll>> vecA(N + 2, {0, 0}); vector<ll> vecB(N + 1, 0);
l(1, N + 2, i) {
cin >> A;
vecA[i] = {A, i};
}
l(1, N + 1, i) cin >> vecB[i];
sort(vecA.begin() + 1, vecA.end());
sort(vecB.begin() + 1, vecB.end());
vector<ll> dif1(N + 1, 0); // dif1[i] = max((vecA[i].first - vecB[i]), 0)
vector<ll> dif2(N + 1, 0); // dif2[i] = max((vecA[i + 1].first - vecB[i]), 0)
l(1, N + 1, i) dif1[i] = max((vecA[i].first - vecB[i]), 0LL);
l(1, N + 1, i) dif2[i] = max((vecA[i + 1].first - vecB[i]), 0LL);
vector<ll> pre1(N + 1, 0); // prefix max của dif1
vector<ll> pre2(N + 2, 0); // prefix max của dif2, tính ngược lên :>
l(1, N + 1, i) pre1[i] = max(pre1[i - 1], dif1[i]);
rl(N, 1, i) pre2[i] = max(pre2[i + 1], dif2[i]);
vector<pair<ll, ll>> ans(N + 2, {0, 0});
ans[N + 1] = {vecA[N + 1].second, *max_element(dif1.begin() + 1, dif1.end())};
//cout << ans[N + 1].first << ' ' << ans[N + 1].second << "\n";
rl(N, 1, i) {
ans[i] = {vecA[i].second, max(pre1[i - 1], pre2[i])};
//cout << ans[i].first << ' ' << ans[i].second << "\n";
}
sort(ans.begin() + 1, ans.end());
l(1, N + 2, i) cout << ans[i].second << ' ';
}