Pagini recente » Cod sursa (job #2068296) | Cod sursa (job #1566849) | Cod sursa (job #1674042) | Cod sursa (job #1308991) | Cod sursa (job #1088466)
#include <fstream>
#define NMAX 100000
using namespace std;
FILE *fin,*fout;
int n;
int a[NMAX],lg[NMAX],pred[NMAX],sir[NMAX];
int maxim(int);
int maximlg(int);
int main()
{
int i,aux=0;
fin=fopen("LIS.in","r");
fout=fopen("LIS.out","w");
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&a[i]);
for(i=1;i<=n;i++)
{
aux=maxim(i);
lg[i]=1+lg[aux];
pred[i]=aux;
}
int x,z=0;
x=maximlg(n);
fprintf(fout,"%d\n",lg[x]);
int predecesor=x;
while(predecesor!=0)
{
z++;
sir[z]=a[predecesor];
predecesor=pred[predecesor];
}
for(i=1;i<=z;i++)
fprintf(fout,"%d ",sir[i]);
return 0;
}
int maximlg(int x)
{
int j=0,max=0,unde=0;
for(j=1;j<=x;j++)
{
if(lg[j]>max)
{
max=lg[j];
unde=j;
}
}
return unde;
}
int maxim(int x)
{
int j=0,max=0,unde=0;
for(j=1;j<x;j++)
{
if(a[j]<a[x] && lg[j]>max)
{
max=lg[j];
unde=j;
}
}
return unde;
}