Cod sursa(job #2204061)

Utilizator codrin18Diac Eugen Codrin codrin18 Data 14 mai 2018 12:27:59
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>

#define nMax 100005
#define For(i,a,b) for (int i=(a);i<=(b);++i)
#define Forr(i,a,b) for (int i=(a);i>=(b);--i)
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int a[nMax],best[nMax],poz[nMax],n,maxN,p;
void read()
{
    in >>n;
    For(i,1,n)
     in >>a[i];
}
void dinamic()
{
    best[n]=1;
    poz[n]=-1;
    maxN=1;
    p=n;
    Forr(i,n-1,1)
    {
        best[i]=1;
        poz[i]=-1;
        For(j,i+1,n)
        {
            if (a[i]<a[j] && best[i]<best[j]+1)
            {
                best[i]=best[j]+1;
                poz[i]=j;
                if (best[i]>maxN) maxN=best[i],p=i;
            }
        }
    }
}
void constr()
{
    int i=p;
    while(i!=-1)
    {
        out <<a[i]<<" ";
        i=poz[i];
    }
}
int main()
{
    read();
    dinamic();
    out <<maxN<<"\n";
    constr();
    return 0;
}