Cod sursa(job #1341796)

Utilizator AdrianGotcaAdrian Gotca AdrianGotca Data 13 februarie 2015 08:36:04
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>

using namespace std;

FILE *f=fopen("scmax.in","r");
FILE *g=fopen("scmax.out","w");

int n,a[100100],urm[100100],lg[100100],max1,im;

void read()
{
    int i;
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf(f,"%d",&a[i]);
}

void solve()
{
    int i,j;
    lg[n]=1;
    for (i=n-1;i>0;i--)
    {
        for (j=i+1;j<=n;j++)
            if (a[j]>a[i])
                if (lg[j]+1>lg[i])
                    lg[i]=lg[j]+1,urm[i]=j;
    }
    for (i=1;i<=n;i++)
        if (max1<lg[i])
            max1=lg[i],im=i;
}

void write()
{
    int j=0,i;
    int sol[100100];
    while (im)
        sol[++j]=a[im],im=urm[im];
    fprintf(g,"%d\n",j);
    for (i=1;i<=j;i++)
        fprintf(g,"%d ",sol[i]);
}
int main()
{
    read();
    solve();
    write();
    return 0;
}