LIS

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

  

posted @ 2019-07-15 22:07  Snow_in_winer  阅读(149)  评论(0编辑  收藏  举报