#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e5 + 10;
const int INF = (int)1e9 + 10;
int n, a[MAXN], b[MAXN];
int x;
struct node {
  int l, r;
  int pm, dm;
} t[MAXN << 2];
void build(int l, int r, int k) {
  t[k].l = l;
  t[k].r = r;
  t[k].pm = t[k].dm = INF;
  if (l == r) return;
  int mid = l + r >> 1;
  build(l, mid, k << 1);
  build(mid + 1, r, k << 1 | 1);
}
void down(int k) {
  if (t[k].pm != INF) {
    int mid = (t[k].l + t[k].r) >> 1;
    t[k << 1].pm = min(t[k << 1].pm, t[k].pm);
    t[k << 1 | 1].pm = min(t[k << 1 | 1].pm, t[k].pm + (mid - t[k].l + 1));
    t[k].pm = INF;
  }
  if (t[k].dm != INF) {
    int mid = (t[k].l + t[k].r) >> 1;
    t[k << 1].dm = min(t[k << 1].dm, t[k].dm);
    t[k << 1 | 1].dm = min(t[k << 1 | 1].dm, t[k].dm - (mid - t[k].l + 1));
    t[k].dm = INF;
  }
}
void update(int l, int r, int v, int ty, int k) {
  if (l > r) return;
  if (t[k].l == l && t[k].r == r) {
    if (ty == 1)
      t[k].pm = min(t[k].pm, v);
    else
      t[k].dm = min(t[k].dm, v);
    return;
  }
  down(k);
  int mid = t[k].l + t[k].r >> 1;
  if (r <= mid)
    update(l, r, v, ty, k << 1);
  else if (l >= mid + 1)
    update(l, r, v, ty, k << 1 | 1);
  else {
    update(l, mid, v, ty, k << 1);
    if (ty == 1)
      update(mid + 1, r, v + (mid - l + 1), ty, k << 1 | 1);
    else
      update(mid + 1, r, v - (mid - l + 1), ty, k << 1 | 1);
  }
}
int query(int pos, int k) {
  if (t[k].l == t[k].r) return min(t[k].pm, t[k].dm);
  int mid = t[k].l + t[k].r >> 1;
  down(k);
  if (pos <= mid)
    return query(pos, k << 1);
  else
    return query(pos, k << 1 | 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    a[x] = n - 1 - i;
  }
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    b[x] = n - 1 - i;
  }
  build(0, n - 1, 1);
  for (int x = 1; x <= n; x++) {
    if (a[x] < b[x]) {
      update(0, n - 1 - b[x], b[x] - a[x], 1, 1);
      update(n - b[x], n - b[x] + a[x], a[x], -1, 1);
      update(n - b[x] + a[x] + 1, n - 1, 1, 1, 1);
    } else if (a[x] > b[x]) {
      update(0, a[x] - b[x], a[x] - b[x], -1, 1);
      update(a[x] - b[x] + 1, n - 1 - b[x], 1, 1, 1);
      update(n - b[x], n - 1, a[x], -1, 1);
    } else {
      update(0, n - 1 - b[x], 0, 1, 1);
      update(n - b[x], n - 1, a[x], -1, 1);
    }
  }
  for (int x = 0; x < n; x++) printf("%d\n", query(x, 1));
  return 0;
}
