#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <iomanip>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <numeric>
#include <cstring>
#include <unordered_map>
#include <cmath>
#include <climits>
#define endl '\n'
#define int long long
using namespace std;
const int N = 2e6 + 10;
int f[N][32];
int a[N],b[N];
int lg2(int x)
{
int cnt = 0;
while ((1 << cnt) <= (x >> 1)) cnt++;
return cnt;
}
int query(int l, int r)
{
int k = lg2(r - l + 1);
return max(f[l][k], f[r - (1 << k) + 1][k]);
}
void solve()
{
int n;
cin >> n;
for(int i=1;i<=n;i++)
{
cin >> a[i];
a[i + n] = a[i];
}
for (int i = 1; i <= n; i++) cin >> b[i];
int e = (n << 1);
int power = lg2(e);
for (int i = 1; i <= e; i++)
{
f[i][0] = a[i];
}
for(int p=1;p<=power;p++)
for (int i = 1; i<= e; i++)
{
f[i][p] = max(f[i][p - 1],f[i + (1 << (p - 1))][p - 1]);
}
for (int i = 1; i <= n; i++)
{
if (query(i + 1, i + n - 1) < b[i]) { cout << -1 << ' '; continue; }
int l1 = i + 1, r1 = (n - 1) / 2 + i, l2 = (n - 1) / 2 + i + 1, r2 = n + i - 1;
for (int p = power; p >= 0; p--)
{
if (l1 + (1 << p) - 1 <= r1 && f[l1][p] < b[i]) l1 += (1 << p);
}
for (int p = power; p >= 0; p--)
{
if (l2 + (1 << p) - 1 <= r2 && f[l2][p] < b[i]) l2 += (1 << p);
}
if (l1>r1) cout << n + i - l2;
else if (l2>r2) cout << l1 - i;
else cout << min(l1 - i, n + i - l2);
cout << ' ';
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int T = 1;
while (T--)
solve();
}