Pagini recente » Cod sursa (job #2471298) | Cod sursa (job #429971) | Cod sursa (job #440064) | Cod sursa (job #2484953) | Cod sursa (job #413680)
Cod sursa(job #413680)
#include <stdio.h>
#include <stdlib.h>
void dinamic(long *a,long *best,long i,long n){
if (i==0) best[i]=1;
if (i==n) return;
int d=best[0];
long j;
for(j=0;j<i;j++)
if (a[i]>a[j])
if (best[j]>d)
d=best[j];
for( j=0;j<i;j++)
if (a[i]>a[j])
best[i]=1+d;
dinamic(a,best,++i,n);
}
long rec(long *a,long *best,long *s,long n){
long max=best[n-1];
long k=0;
for(long i = n-1;i>=0;i--)
if(best[i]>max)
max=best[i];
long j=n-1;
while(max>=1){
if (best[j]==max) {
s[k++]=a[j];
--max;
}
j--;
}
return k;
}
int main() {
long a[100000],best[100000];
long n;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for (long i=0;i<n;i++)
scanf("%d", &a[i]);
for (long i=0;i<n;i++)
best[i]=1;
dinamic(a,best,0,n);
long k;
long s[n];
k=rec(a,best,s,n);
printf("%d \n",k);
for(long i=k-1;i>=0;i--)
printf("%d ",s[i]);
return 1;
}