https://www.luogu.com.cn/record/220613961
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100001;
int t[maxn],n;
int lowbit(int x){
return x&-x;
}
void add(int x,int num){
for(int i=x;i<=n;i+=lowbit(i))
t[i]=max(t[i],num);
}
int get(int x){
int ans=0;
for(int i=x;i;i-=lowbit(i))
ans=max(ans,t[i]);
return ans;
}
int main(){
cin>>n;
int a[n+1],b[n+1],c[n+1];
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i],c[i]=b[i];
sort(b+1,b+n+1);
for(int i=1,left,mid,right;i<=n;i++){
left=1,right=n;
while(left<right){
mid=(right+left)>>1;
if(b[mid]<a[i])left=mid+1;
else right=mid;
}
a[i]=left;
}
int f[n+1];
f[1]=1;
add(a[1],f[1]);
for(int i=2;i<=n;i++){
f[i]=get(a[i])+1;
add(a[i],f[i]);
}
cout<<f[n];
return 0;
}