#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n;
int a[N],b[N],c[N*2],pos[N*2];
struct Fenwick{
int t[N];
void update(int i,int v){
for(;i<=n;i+=i&-i)t[i]=max(t[i],v);
}
int query(int i){
int res=0;
for(;i>0;i-=i&-i)res=max(res,t[i]);
return res;
}
}f;
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
c[i]=a[i];
}
for(int i=1;i<=n;i++){
cin >> b[i];
if(b[i]<a[i])b[i]=0;
c[i+n]=b[i];
}
for(int i=1;i<=n;i++)a[i]=lower_bound(c+1,c+2*n+1,a[i])-c;
for(int i=1;i<=n;i++)b[i]=lower_bound(c+1,c+2*n+1,b[i])-c;
for(int i=1;i<=n;i++)pos[a[i]]=i;
for(int i=1;i<=n;i++){
int p=pos[b[i]];
if(p)f.update(p,f.query(p)+1);
}
cout << f.query(n);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |