Pagini recente » Monitorul de evaluare | Cod sursa (job #1760469) | Clasament dupa rating | Istoria paginii utilizator/baloiangel | Cod sursa (job #2012452)
#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]);
best[1] = 1;
pre[1] = 1;
for(int i = 2;i <= N;i++) {
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++)
gd = (best[i] > gd) ? (best[i], ind = i) : gd;
fprintf(fout, "%d\n", gd);
ans[++cnt] = ind;
while(ind > 1) {
ind = pre[ind];
ans[++cnt] = ind;
}
if(ans[cnt] == 0)
cnt--;
for(int i = cnt;i >= 1;i--)
fprintf(fout, "%d ", v[ans[i]]);
fclose(fin);
fclose(fout);
return 0;
}