Cod sursa(job #1873080)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 8 februarie 2017 19:35:34
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#define nmax 100005

using namespace std;

int a[nmax],l[nmax],p[nmax],b[nmax],n,k;

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

int main()
{
    fin>>n;
    for(int i=0;i<n;i++)
    {
        p[i]=-1;
        l[i]=1;
    }
    k=0;
    for(int i=0;i<n;i++)
        fin>>a[i];
    for(int i=1;i<n;i++)
    {
        //inv: 0 < i <= n && l[k] = length of longest increasing subsequence in a[0..i)
        for(int j=0;j<i;j++)
            if(a[j]<a[i]&&l[j]>=l[i])
            {
                l[i]=l[j]+1;
                p[i]=j;
                if(l[i]>l[k])
                    k=i;
            }
    }
    int len=l[k];
    for(int i=len-1;i>=0;i--)
    {
        b[i]=a[k];
        k=p[k];
    }
    fout<<len<<"\n";
    for(int i=0;i<len;i++)
        fout<<b[i]<<" ";
    return 0;
}