Cod sursa(job #1088643)

Utilizator Maxim97Maxim Andrei Maxim97 Data 20 ianuarie 2014 18:12:31
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 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-1;i>=1;i--)
    o<<sir[i]<<' ';
    o<<'\n';o.close();
}
 
int main()
{
    cit();
    LIS();
    afis();
    return 0;
}