1 ans = dp[1] = 1;
2 for (int i = 1; i <= n; i++) {
3 for (int j = 1; j < i; j++) {
4 if (a[j] < a[i]) {
5 f[i] = max(f[i], f[j] + 1);
6 ans = max(ans, f[i]);
7 }
8 }
9 }
10 for (int i = 1; i <= n; i++) {
11 if (b[i] > d[l]) {
12 d[++l] = b[i];
13 } else {
14 int k = lower_bound(d + 1, d + l + 1, b[i]) - d;
15 d[k] = b[i];
16 }
17 }
18 ans=l;
int solve(){
int len=0;
for (int i=1;i<=n;i++){
if (vis[a[i]]==-1) continue;
int it=lower_bound(d,d+len,a[i])-d;
if (it==len){
d[len++]=a[i];
path[i]=len;
}else{
d[it]=a[i];
path[i]=it+1;
}
}
memset(used,0,sizeof(used));
int tmp=len;
for (int i=n;i>=1;i--){
if (vis[a[i]]==-1){
continue;
}
if (path[i]==tmp){
used[a[i]]=1;
tmp--;
}
}
return len;
}