Pagini recente » Cod sursa (job #1139628) | Istoria paginii runda/qwertyytrewq | Cod sursa (job #290150) | Clasament onisim2009-7 | Cod sursa (job #2012461)
#include <stdio.h>
FILE *fin, *fout;
#define MAX_N 100000
int best[MAX_N + 1];
int pre[MAX_N + 1];
int ans[MAX_N + 1], cnt;
int N, v[MAX_N + 1];
int main() {
fin = fopen("scmax.in", "r");
fout = fopen("scmax.out", "w");
fscanf(fin, "%d", &N);
for(int i = 1;i <= N;i++)
fscanf(fin, "%d", &v[i]);
for(int i = 1;i <= N;i++) {
best[i] = 1;
pre[i] = -1;
for(int j = 1;j < i;j++)
if(v[i] > v[j] && best[j] + 1 > best[i])
best[i] = best[j] + 1, pre[i] = j;
}
int gd = 0, ind;
for(int i = 1;i <= N;i++)
ind = (best[i] > gd) ? (i) : ind, gd = (best[i] > gd) ? (best[i]) : gd;
fprintf(fout, "%d\n", gd);
ans[++cnt] = ind;
while(ind > 1) {
ind = pre[ind];
ans[++cnt] = ind;
}
for(int i = cnt - 1;i >= 1;i--)
fprintf(fout, "%d ", v[ans[i]]);
fclose(fin);
fclose(fout);
return 0;
}