1 for (int i=1;i<=n;i++) {
2 for (int j = 1; j <= m; j++) {
3 dp[i+1][j+1]=dp[i][j];
4 if (a[i] == b[j]) {
5 dp[i + 1][j + 1] = dp[i][j] + 1;
6 } else {
7 dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
8 }
9 }
10 }
11 int main() {
12 scanf("%d", &n);
13 for (int i = 1; i <= n; i++) {
14 scanf("%d", &x);
15 a[x] = i;
16 }
17 for (int i = 1; i <= n; i++) {
18 scanf("%d", &x);
19 b[i] = a[x];
20 }
21 for (int i = 1; i <= n; i++) {
22 if (b[i] > d[l]) {
23 d[++l] = b[i];
24 } else {
25 int k = lower_bound(d + 1, d + l + 1, b[i]) - d;
26 d[k] = b[i];
27 }
28 }
29 printf("%d\n", l);
30 }