Cod sursa(job #2299925)

Utilizator SemetgTemes George Semetg Data 10 decembrie 2018 16:00:12
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#define N_MAX 100005
using namespace std;

ifstream in { "scmax.in" };
ofstream out { "scmax.out" };

int N, K;
int a[N_MAX], dp[N_MAX], t[N_MAX];

void print(int c) {
    if (c) {
        print(t[c]);
        out << a[c] << ' ';
    }
}

int main(){
    in >> N;
    for (int i = 1; i <= N; ++i)
        in >> a[i];

    dp[++K] = 1;
    for (int i = 1; i <= N; ++i) {
        int stg = 1, drp = K;
        while (stg <= drp) {
            int mij = (stg + drp) / 2;
            if (a[dp[mij]] < a[i])
                stg = mij + 1;
            else
                drp = mij - 1;
        }

        if (stg > K)
            ++K;

        dp[stg] = i;
        t[i] = dp[stg - 1];
    }

    out << K << '\n';
    print(dp[K]);
}