以下の内容はhttps://drken1215.hatenablog.com/entry/2024/09/29/141447より取得しました。


鉄則本 A24 - LIS (1Q, ★5)

LIS。鉄則本の問題なのでコードのみ。

問題概要

長さ  N の数列  A_{1}, A_{2}, \dots, A_{N} の LIS の長さを求めよ。

制約

  •  1 \le N \le 10^{5}

コード

#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 29;

int main() {
    int N, res = 0;
    cin >> N;
    vector<int> A(N);
    for (int i = 0; i < N; i++) cin >> A[i];

    // dp[v] := A から長さ v の IS をとったときの、最終項の値の最小値
    vector<int> dp(N+1, INF);
    dp[0] = 0;
    for (int i = 0; i < N; i++) {
        int j = lower_bound(dp.begin(), dp.end(), A[i]) - dp.begin();
        dp[j] = A[i];
        res = max(res, j);
    }
    cout << res << endl;
}



以上の内容はhttps://drken1215.hatenablog.com/entry/2024/09/29/141447より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14