Cod sursa(job #2575695)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 6 martie 2020 15:04:14
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAXN = 100005;

int dp[MAXN], fat[MAXN], inp[MAXN], k, n;

bool compare(const int &x, const int &y)
{
    return inp[x] < inp[y];
}

void print(int ind)
{
    if (ind == 0)
        return;
    print(fat[ind]);
    fout << inp[ind] << ' ';
}

int main()
{
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> inp[i];
        if (inp[i] > inp[dp[k]]) {
            dp[++k] = i;
            fat[i] = dp[k - 1];
        }
        else {
            int ind = lower_bound(dp + 1, dp + k + 1, i, compare) - dp;
            dp[ind] = i;
            fat[i] = dp[ind - 1];
        }
    }
    fout << k << '\n';
    print(dp[k]);
    return 0;
}