Cod sursa(job #1803675)

Utilizator OFY4Ahmed Hamza Aydin OFY4 Data 11 noiembrie 2016 17:58:45
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

#define nMax 100007

using namespace std;

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

int n, sayi, v[nMax], q[nMax], d[nMax], cevap[nMax], tmp[nMax], dr ,st, poz, uzunluk;

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

    for(int i = 1; i <= n; ++i)
    {
        st = 1;
        dr = sayi;
        while(st <= dr)
        {
            int mid = (st + dr) / 2;
            if(v[q[mid]] >= v[i])
                dr = mid - 1;
            else
                st = mid + 1;
        }
        d[i] = d[q[st - 1]] + 1;
        tmp[i] = q[st - 1];
        if(st == sayi + 1)
            ++sayi;
        q[st] = i;
    }

    for(int i = 1; i <= n; ++i)
    {
        if(d[i] > d[poz])
            poz = i;
    }

    for(int i = poz; i > 0; i = tmp[i])
    {
        cevap[++uzunluk] = v[i];
    }
    out << uzunluk << "\n";
    for(int i = uzunluk; i > 0; --i)
    {
        out << cevap[i] << " ";
    }
}