Cod sursa(job #2090007)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 17 decembrie 2017 14:38:22
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>

#define NMAX 100001

using namespace std;

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

int n,v[NMAX],dp[NMAX],nextt[NMAX],aux[NMAX],x;

int main()
{
    fin >> n;
    int i,j;
    int maxim=-1;
    for(i=1;i<=n;i++)
    {
        fin >> v[i];
    }
    for(i=1;i<=n;i++)
    {
        dp[i] = 1;
        for(j=i-1;j>=1;j--)
        {
            if(v[j]<v[i])
            {
                if(dp[i]<=dp[j]) /// +1
                {
                    /// memoreaza-l pe j
                    nextt[i]=j;
                    dp[i]=dp[j]+1;
                }
            }
        }

    }
    for(i=1;i<=n;i++)
    {
        if(dp[i]>maxim)
        {
            maxim=dp[i];
            x=i;
        }
    }
    aux[1]=v[x];
    int k=2;
    while(nextt[x]!=0)
    {
        aux[k]=v[nextt[x]];
        nextt[x]=nextt[nextt[x]];
        k++;
    }
    fout << maxim << '\n';
    for(i=k-1;i>=1;i--)
    {
        fout << aux[i] << ' ';
    }
    return 0;
}