#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
const int INF = 1e9;
int P[300009], Q[300009], R[300009], T[1212121], L[1212121];
pii G[1212121];
void push(int idx, int s, int e) {
  if (L[idx]) {
    G[idx].first += L[idx];
    if (s != e) {
      L[idx * 2] += L[idx];
      L[idx * 2 + 1] += L[idx];
    }
    L[idx] = 0;
  }
}
void _init(int idx, int s, int e) {
  if (s == e) {
    G[idx] = {0, s};
    return;
  }
  int m = s + e >> 1;
  _init(idx * 2, s, m);
  _init(idx * 2 + 1, m + 1, e);
  G[idx] = min(G[idx * 2], G[idx * 2 + 1]);
}
void _updr(int idx, int s, int e, int l, int r, int v) {
  push(idx, s, e);
  if (r < s || e < l) return;
  if (l <= s && e <= r) {
    L[idx] += v;
    push(idx, s, e);
    return;
  }
  int m = s + e >> 1;
  _updr(idx * 2, s, m, l, r, v);
  _updr(idx * 2 + 1, m + 1, e, l, r, v);
  G[idx] = min(G[idx * 2], G[idx * 2 + 1]);
}
pii _get(int idx, int s, int e, int l, int r) {
  push(idx, s, e);
  if (r < s || e < l) return {INF, INF};
  if (l <= s && e <= r) return G[idx];
  int m = s + e >> 1;
  return min(_get(idx * 2, s, m, l, r), _get(idx * 2 + 1, m + 1, e, l, r));
}
void init(int idx, int s, int e) {
  if (s == e) {
    T[idx] = P[s];
    return;
  }
  int m = s + e >> 1;
  init(idx * 2, s, m);
  init(idx * 2 + 1, m + 1, e);
  T[idx] = max(T[idx * 2], T[idx * 2 + 1]);
}
void upd(int idx, int s, int e, int p, int v) {
  if (p < s || e < p) return;
  if (s == e) {
    T[idx] = v;
    return;
  }
  int m = s + e >> 1;
  upd(idx * 2, s, m, p, v);
  upd(idx * 2 + 1, m + 1, e, p, v);
  T[idx] = max(T[idx * 2], T[idx * 2 + 1]);
}
int get(int idx, int s, int e, int l, int r) {
  if (r < s || e < l) return 0;
  if (l <= s && e <= r) return T[idx];
  int m = s + e >> 1;
  return max(get(idx * 2, s, m, l, r), get(idx * 2 + 1, m + 1, e, l, r));
}
int main() {
  int N;
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) {
    scanf("%d", &P[i]);
    R[P[i]] = i;
  }
  init(1, 1, N);
  _init(1, 1, N);
  for (int i = 1; i <= N; i++) {
    printf("%d ", get(1, 1, N, 1, N));
    int q;
    scanf("%d", &q);
    int qq = q;
    q = _get(1, 1, N, q, N).second;
    int mx = get(1, 1, N, 1, q);
    upd(1, 1, N, R[mx], 0);
    _updr(1, 1, N, R[mx], N, +1);
    _updr(1, 1, N, qq, N, -1);
  }
  return 0;
}
