Pagini recente » Istoria paginii runda/1645850989007291/clasament | Cod sursa (job #3252282) | Cod sursa (job #3257689) | Cod sursa (job #3215571) | Cod sursa (job #2661758)
#include <stdio.h>
#include <string.h>
using namespace std;
int v[100001], l[100001], p[100001], f[100001];
int main()
{
int n;
FILE * fin = fopen("scmax.in", "r");
FILE * fout = fopen("scmax.out", "w");
fscanf(fin, "%d", &n);
for (int i=0; i<n; i++)
fscanf(fin, "%d", &v[i]);
int lmax = 1, pmax = 0;
for (int i=0; i<n; i++){
p[i] = -1;
l[i] = 1;
for (int j=0; j<i; j++){
if (v[j] < v[i] && l[i] < (l[j]+1)){
l[i] = l[j]+1;
p[i] = j;
}
}
if (lmax < l[i]){
lmax = l[i];
pmax = i;
//printf ("%d %d\n", lmax, pmax);
}
}
fprintf(fout, "%d\n", lmax);
for (int i=pmax; i>=0 && l[i]>0; i=p[i]){
f[l[i] - 1] = v[i];
}
for (int i=0; i<lmax; i++)
fprintf(fout, "%d ", f[i]);
fclose(fin);
fclose(fout);
}