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 ", l); 30 }