有没有大佬能给我解释一下这段代码啥意思
#include<bits/stdc++.h>
using namespace std;
int n,a[100010],a2[100010],m[100100],b[100010],len;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
m[a[i]]=i;
}
for(int i=1;i<=n;i++)cin>>a2[i];
for(int i=1;i<=n;i++){
if(m[a2[i]]>b[len]){
b[++len]=m[a2[i]];
continue;
}
int k=lower_bound(b+1,b+len+1,m[a2[i]])-b;
b[k]=m[a2[i]];
}
cout<<len;
return 0;
}