Pagini recente » Cod sursa (job #1806936) | Statistici Wongraven (Wongraven) | Cod sursa (job #499828) | Istoria paginii utilizator/alexbota2ooo | Cod sursa (job #1731168)
#include<stdio.h>
int n,a[100001],lungimeMax, lungMax[100001],predecesor[100001], ultimElemSubsir, max, subsir[100001];
FILE *inputFile, *outputFile;
void lungSirMaximal()
{
int i,j;
lungMax[1]=1;
predecesor[1]=-1;
max=1;
for(i=2; i<=n; i++)
{
lungMax[i]=1;
predecesor[i]=-1;
for(j=1; j<i; j++)
{
if((a[j] < a[i]) && (lungMax[i] < lungMax[j] + 1))
{
lungMax[i]=lungMax[j]+1;
predecesor[i]=j;
if(lungMax[i] > max)
{
max=lungMax[i];
ultimElemSubsir=i;
}
}
}
}
}
int main()
{
inputFile=fopen("scmax.in","r");
outputFile=fopen("scmax.out","w");
fscanf(inputFile, "%d", &n);
for(int i=1; i<=n; i++)
{
fscanf(inputFile, "%d", &a[i]);
}
lungSirMaximal();
fprintf(outputFile,"%d", max);
fprintf(outputFile, "\n");
int i=ultimElemSubsir, k=0;
while(i != -1)
{
subsir[k++]=a[i];
i=predecesor[i];
}
for(i=k-1; i>=0; i--)
{
fprintf(outputFile, "%d ", subsir[i]);
}
return 0;
}