記錄路徑的LIS模板

int p[maxn],used[maxn],vis[maxn],d[maxn],path[maxn];
int solve()//記錄路徑的LIS模板
{
    int len=0;
    for(int i=1;i<=n;i++){
        int it=lower_bound(d,d+len,p[i])-d;
        if(it==len){
            d[len++]=p[i];
            path[i]=len;
        }
        else{
            d[it]=p[i];
            path[i]=it+1;
        }
    }
    for(int t=0;t<=n;t++){
        used[t]=0;
    }
   // fill(used,used+maxn,0);
    int tmp=len;
    for(int i=n;i>0;i--){
        if(path[i]==tmp){
            used[p[i]]=1;
            tmp--;
        }
    }
    return len;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章