LIS模板O(nlogn)

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/zehong1995/article/details/78115667

嚴格遞增LIS

int solve(int x) {
    int dp[maxn + 5];
    memset(dp, 0x3f, sizeof(dp));
    dp[0] = b[0];
    int top = 1;
    for(int i = 1; i < x; ++ i) {
        if(b[i] > dp[top - 1]) {
            dp[top] = b[i];
            top++;
        } else {
            int pos = lower_bound(dp, dp + top, b[i]) - dp;
            dp[pos] = b[i];
        }
    }
    return top;
}

不嚴格遞增LIS

int solve(int x) {
    int dp[maxn + 5];
    memset(dp, 0x3f, sizeof(dp));
    dp[0] = b[0];
    int top = 1;
    for(int i = 1; i < x; ++ i) {
        if(b[i] >= dp[top - 1]) {
            dp[top] = b[i];
            top++;
        } else {
            int pos = upper_bound(dp, dp + top, b[i]) - dp;
            dp[pos] = b[i];
        }
    }
    return top;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章