Pagini recente » Cod sursa (job #7530) | Cod sursa (job #3233206) | Monitorul de evaluare | Cod sursa (job #359284) | Cod sursa (job #2694158)
#include <iostream>
#include <stdio.h>
#define NMAX 100000
using namespace std;
int maxim(int a, int b) {
return a > b ? a : b;
}
int v[NMAX + 1], dp[NMAX + 1], prev1[NMAX + 1], vsol[NMAX + 1];
int main() {
FILE *fin, *fout;
int n, i, j, max1, pozmax, scmax, pozscmax, poz, nsol;
fin = fopen("scmax.in", "r");
fscanf(fin, "%d", &n);
for (i = 0; i < n; i++)
fscanf(fin, "%d", &v[i]);
fclose( fin );
scmax = 0;
for (i = 0; i < n; i++) {
pozmax = -1;
dp[i] = 1;
for (j = 0; j < i; j++)
if (v[j] < v[i]) {
if (dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
pozmax = j;
}
}
prev1[i] = pozmax;
if (dp[i] > scmax) {
scmax = dp[i];
pozscmax = i;
}
}
fout = fopen("scmax.out", "w");
fprintf(fout, "%d\n", scmax);
poz = pozscmax;
nsol = 0;
while (poz != -1) {
vsol[nsol++] = v[poz];
poz = prev1[poz];
}
for (i = nsol - 1; i >= 0; i--)
fprintf(fout, "%d ", vsol[i]);
fclose( fout );
return 0;
}