Cod sursa(job #2565424)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 2 martie 2020 14:12:49
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n,i,v[100005],d[100005],tata[100005],sol[100005];

int main()
{
    fin >> n;
    for (i=1; i<=n; i++)
        fin >> v[i];
    d[1] = 1; int k = 1;
    for (i=2; i<=n; i++)
    {
        int st = 1; int dr = k;
        while (st <= dr)
        {
            int mid = (st+dr)/2;
            if (v[d[mid]] < v[i])
                st = mid+1;
            else
                dr = mid-1;
        }
        if (st == k+1)
            k++;
        d[st] = i; tata[i] = d[st-1];
    }
    int x = d[k]; int t = 0;
    while (x != 0)
    {
        sol[++t] = x;
        x = tata[x];
    }
    fout << t << "\n";
    for (i=t; i>=1; i--)
        fout << v[sol[i]] << " ";
    return 0;
}