#include <bits/stdc++.h>   using namespace std;   const int N = (int)3e5 + 50;   struct node {     int sum, suf;     void add(int val) {       sum += val;       suf = max(sum, 0);     }   };   node merge(node L, node R) {     return {L.sum + R.sum, max(R.sum + L.suf, R.suf)};   }   struct Tree {     node dat[4 * N];     void init(int n) { fill(dat, dat + 4 * n, node{0, 0}); }     void update(int pos, int x, int l, int r, int val) {       if (l == r) {         dat[x].add(val);         return;       }       int mid = (l + r) / 2;       if (pos <= mid)         update(pos, 2 * x + 1, l, mid, val);       else         update(pos, 2 * x + 2, mid + 1, r, val);       dat[x] = merge(dat[2 * x + 1], dat[2 * x + 2]);     }   } tree;   int n;   int loc[N];   int main() {     ios::sync_with_stdio(false);     cin.tie(NULL);     cin >> n;     tree.init(n);     for (int i = 0; i < n; i++) {       int x;       cin >> x;       x--;       loc[x] = i;     }     int cur = n - 1;     for (int i = 0; i < n; i++) {       while (cur >= 0 && tree.dat[0].suf == 0) {         tree.update(loc[cur--], 0, 0, n - 1, 1);       }       cout << cur + 2 <<    ;       int q;       cin >> q;       q--;       tree.update(q, 0, 0, n - 1, -1);     }   }   