#include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define mt make_tuple #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)< pii; typedef vector vi; typedef vector vll; template struct BinaryIndexedTree { int n; vector t; BinaryIndexedTree() {} BinaryIndexedTree(int _n) :n(_n + 1), t(_n + 1) {} void add(int k, Val val) { k++; while (k < n) { t[k] += val; k += (k&-k); } } void set(int k, Val val) { add(k, -sum(k, k + 1)); add(k, val); } Val sum(int k) { Val r = 0; while (k > 0) { r += t[k]; k -= (k&-k); } return r; } Val sum(int l, int r) { return sum(r) - sum(l); } }; typedef BinaryIndexedTree BIT; typedef tuple T; int N, A[100005], B[100005], p[100005], q[100005]; int main(){ ios::sync_with_stdio(false); cin.tie(0); cin >> N; rep(i, N)cin >> A[i]; rep(i, N)cin >> B[i]; rep(i, N) { p[A[i] - 1] = i; q[B[i] - 1] = i; } vector U(N); rep(i, N) { U[i] = make_tuple(p[i], q[i], i + 1); } sort(U.rbegin(), U.rend()); set ans; BIT bit(N); rep(i, N) { int a, b, k; tie(a, b, k) = U[i]; if (bit.sum(b) == 0)ans.insert(k); bit.add(b, 1); } each(x, ans)cout << x << endl; }