Cod sursa(job #1860990)

Utilizator sadpolkgigi becali smecher sadpolk Data 28 ianuarie 2017 15:16:56
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>

using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int r[100005],d[100005],lung[100005],pred[100005];
void sir(int p)
{
    if(pred[p]!=0)
        sir(pred[p]);
    out<<r[p]<<" ";
}
int main()
{
    int i,n,lmax;
    in>>n;
    for(i=1; i<=n; ++i)
        in>>r[i];
    for(i=1; i<=n; i++)
        d[i]=-1;
    d[0]=0;
    /*for(i=1;i<=n;i++)
    {
        for(j=i;j>=1;--j)
        {
            if(r[i]>r[j])
            {
                if(d[i]>d[j])
                    d[i]=d[j]+1;

            }
        }
    }*/
    for(i=1; i<=n; i++)
    {
        lmax=0;
        for(int j=1; j<i; j++)
        {
            if(r[j]<r[i]//if(r[j]>r[i]&&ultim[v[j]]==j)pt decrease
            {//if(lung[j]==lmax)nr[i]+=nr[j];subsiruri
                if(lung[j]>lmax)
                {
                    lmax=lung[j];
                    pred[i]=j;//nr[i]=nr[j];
                }
            }
        }
        lung[i]=1+lmax;//decrease ultim[v[i]]=i;
    }/*asta la inceput
    For(parcurg numerele)
    { cin>>x;
        if(x==xmax)
                nrap++;
        if(x>xmax)
            xmax=x;
            nrap=1;
    }
    SUBSIRURI*/
    int pmax=1;
    for(i=2; i<=n; ++i)
    {
        if(lung[i]>lung[pmax])
            pmax=i;
    }
    out<<lung[pmax]<<"\n";
    sir(pmax);
    return 0;
}