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; }