Pagini recente » Cod sursa (job #758712) | Cod sursa (job #2220393) | Cod sursa (job #2827939) | Cod sursa (job #1440295) | Cod sursa (job #1864385)
#include <stdio.h>
#include <stdlib.h>
int v[100000],lung[100000],numeros[100000];
FILE*fin,*fout;
int k;
void computeShit(int poz){
int i;
for(i=0;i<poz;i++)
if(v[i]<v[poz] && lung[i]+1>lung[poz])
lung[poz]=lung[i]+1;
}
void recursiveShit(int nr,int n,int val,int poz){
int i;
if(nr>=1){
for(i=0;i<poz;i++){
if(lung[i]==nr && v[i]<val){
numeros[k]=v[i];
k++;
recursiveShit(nr-1,n,v[i],i);
break;
}
}
}
}
void findMax(int* max,int n){
int i,nr;
for(i=0;i<n;i++){
if(lung[i]>(*max))
(*max)=lung[i];
}
nr=(*max);
recursiveShit(nr,n,2000000001,n);
}
int main()
{
int n,i,max=-1;
fin = fopen("scmax.in" ,"r");
fout = fopen("scmax.out" ,"w");
fscanf(fin, "%d" ,&n);
for(i=0;i<n;i++){
fscanf(fin, "%d" ,&v[i]);
lung[i]=1;
computeShit(i);
}
findMax(&max,n);
fprintf(fout, "%d\n" ,max);
k--;
while(k>=0){
fprintf(fout, "%d " ,numeros[k]);
k--;
}
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}