#include bits/stdc++.h #define MAXN 5010 using namespace std; int f[MAXN],loot[MAXN],num[MAXN]; int i,n,m,j,a,ans[MAXN]; void _shuchu( int n){ if (loot[n]!= 0 ) _shuchu(loot[n]); printf( " %d " ,num[n]);} int find( int n){ if (loot[n]!= 0 )
#include <bits/stdc++.h> #define MAXN 5010 using namespace std; int f[MAXN],loot[MAXN],num[MAXN]; int i,n,m,j,a,ans[MAXN]; void _shuchu(int n) { if(loot[n]!=0) _shuchu(loot[n]); printf("%d ",num[n]); } int find(int n) { if(loot[n]!=0) _shuchu(loot[n]); else return n; } int main(){ scanf("%d",&n); for(i=1;i<=n;i++) f[i]=1,scanf("%d",&num[i]); for(i=1;i<=n;i++) { for(j=1;j<i;j++) { if(num[i]>num[j]&&1+f[j]>f[i]) f[i]=f[j]+1,loot[i]=j; } }j=0; for(i=2;i<=n;i++) { if(f[i-1]<=f[i]) ans[++j]=i; else ans[++j]=i-1; } for(;j>1;j--) { if(find(j)<find(j-1)) ans[0]=j; else ans[0]=j-1; } printf("%d\n",f[ans[0]]); _shuchu(ans[0]); }