Pagini recente » Borderou de evaluare (job #702999) | Cod sursa (job #2719816) | Cod sursa (job #887747) | Cod sursa (job #51555) | Cod sursa (job #1124599)
#include <cstdio>
using namespace std;
FILE *f=fopen("scmax.in","r");
FILE *g=fopen("scmax.out","w");
int v[100001],t[100001],b[100001],maxim,pos,sol[100001];
int main()
{int n,i,j;
fscanf(f,"%d",&n);
for (i=1;i<=n;i++) fscanf(f,"%d",&v[i]);
for (i=1;i<=n;i++) {b[i]=1;
for (j=1;j<i;j++) if (v[i]>v[j]&&b[j]>=b[i]) {b[i]=b[j]+1;
t[i]=j;
}
}
for (i=1;i<=n;i++) if (b[i]>maxim) {maxim=b[i];pos=i;}
while (pos!=0) {sol[b[pos]]=pos;
pos=t[pos];
}
fprintf(g,"%d\n",maxim);
for (i=1;i<=maxim;i++) fprintf(g,"%d ",v[sol[i]]);
fprintf(g,"\n");
return 0;
}