#include <bits/stdc++.h>
using namespace std ;
int len ;
const int N = 1e5 + 10 ;
int a[N] ;
int n ;
int p[N], f[N] ;
int bound(int x) {
int l = 1, r = len ;
while (l < r) {
int mid = l + r >> 1;
if (p[f[mid]] > p[x])
r = mid ;
else
l = mid + 1 ;
}
return l;
int l = 1 , r = len ;
while(l < r)
{
int mid = l + r + 1 >> 1 ;
if (p[f[mid]] < p[x])
l = mid ;
else r = mid - 1 ;
}
return r + 1 ;
}
int main() {
cin >> n ;
for (int i = 1 ; i <= n ; i ++)
cin >> a[i] ;
for (int i = 1 ; i <= n ; i ++) {
int x ;
cin >> x ;
p[x] = i;
}
for (int i = 1 ; i <= n ; i ++) {
if (p[a[i]] > p[f[len]])
f[++len] = a[i] ;
else
f[bound(a[i])] = a[i] ;
}
cout << len ;
return 0 ;
}
bound 函数里面的二分有什么区别吗? 第一个100 第二个20