Pagini recente » Cod sursa (job #2621391) | Cod sursa (job #303207) | Cod sursa (job #2706635) | Cod sursa (job #1880305) | Cod sursa (job #1867438)
#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 findMax(int* max,int n){
int i,nr,poz,val;
for(i=0;i<n;i++){
if(lung[i]>(*max))
(*max)=lung[i];
}
nr=(*max);
poz=n;
val=2000000001;
while(nr>0){
poz--;
for(i=poz;i>=0;i--){
if(lung[i]==nr && v[i]<val){
numeros[k]=v[i];
k++;
poz=i;
val=v[i];
break;
}
}
nr--;
}
}
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;
}