Cod sursa(job #2325966)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 23 ianuarie 2019 11:33:48
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda simulare_preoli Marime 1.03 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n,a[100006],dp[100006],tati[100006],sol[100006];
int main()
{

    fi>>n;

    for(int i=1; i<=n; i++)
    {
        fi>>a[i];
        dp[i]=1;
    }

    tati[1]=0;

    for(int i=2; i<n; i++)
        for(int j=i+1; j<=n; j++)
        {
            if(a[i]<a[j])
            {
                dp[j]=dp[i]+1;
                tati[j]=i;
            }
            else
            {

                dp[i]=max(dp[i],1);
            }
        }

    int maximal=-10000;
    int ii=0,lung;

    for(int i=1; i<=n; i++)
        if(maximal<dp[i])
        {
            maximal=dp[i];
            ii=i;
        }

    lung=maximal;
    fo<<maximal<<'\n';

    while(tati[ii]!=0)
    {
        sol[lung]=a[ii];
        ii=tati[ii];
        lung--;
    }
    sol[lung]=a[ii];

    for(int i=1; i<=maximal; i++)
        fo<<sol[i]<<" ";

    fi.close();
    fo.close();
    return 0;
}