Cod sursa(job #1088335)

Utilizator Maxim97Maxim Andrei Maxim97 Data 20 ianuarie 2014 14:41:38
Problema Subsir crescator maximal Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <cstdio>
#define NMAX 100001
using namespace std;

FILE *in;
//ifstream in("LIS.in");
ofstream o("scmax.out");

int n,lgm,pi;
int a[NMAX];
int lg[NMAX];
int prec[NMAX],sir[NMAX];

void cit()
{
    int i;
    in=fopen("scmax.in","r");
    //in>>n;
    fscanf(in,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(in,"%d",&a[i]);
    fclose(in);
}

void LIS()
{
    int i,j;
    lg[1]=1;
    prec[1]=0;
    for(i=2;i<=n;i++)
    {
        lg[i]=1;prec[i]=0;
        for(j=1;j<i;j++)
        {
            if(a[j]<=a[i]&&lg[j]+1>lg[i])
           {
               lg[i]=1+lg[j];
               prec[i]=j;
               if(lgm<lg[i])
                lgm=lg[i],pi=i;
           }
        }
    }
}

void afis()
{
    int i=pi,j=1;
    o<<lgm<<'\n';
    while(i!=0)
    {
        sir[j]=a[i];
        j++;
        i=prec[i];
    }
    for(i=j;i>=1;i--)
    o<<sir[i]<<' ';
    o<<'\n';o.close();
}

int main()
{
    cit();
    LIS();
    afis();
    return 0;
}