[數據約束和評分方法]
60%的測試數據中:1<=N <= 1 000
100%的測試數據中:1<=N <= 20 000ios
/* 考慮LCS如何優化。 由於在作LCS時,只有a[i]==b[j],纔會加一,並且這道題相同的只有五個,因此能夠提早把位置記下來,用一維數組轉移。 即f[i]=max(f[j]+1) a[i]==b[j],用樹狀數組維護一下最大值。 */ #include<cstdio> #include<iostream> #define N 100010 using namespace std; int f[N],pos[N][6],mx[N],n; int query(int x){ int ans=0; for(;x>0;x-=(x&-x))ans=max(ans,f[x]); return ans; } void change(int x,int v){ for(;x<=n*5;x+=(x&-x))f[x]=max(f[x],v); } int main(){ scanf("%d",&n); for(int i=1;i<=n*5;i++){ int x;scanf("%d",&x); pos[x][++pos[x][0]]=i; } int ans=0; for(int i=1;i<=n*5;i++){ int x;scanf("%d",&x); for(int j=5;j>=1;j--){ int k=pos[x][j]; f[k]=max(f[k],query(k-1)+1); change(k,f[k]); ans=max(ans,f[k]); } } printf("%d",ans); return 0; }