Pagini recente » Cod sursa (job #2018494) | Cod sursa (job #778404) | Borderou de evaluare (job #1956621) | Cod sursa (job #352189) | Cod sursa (job #2900554)
#include <cstdio>
using namespace std;
FILE *fin, *fout;
int max(int a, int b)
{
return (a > b) ? a : b;
}
#define NMAX 100000
int v[NMAX + 5], sol[NMAX + 5], prev[NMAX + 5], a[NMAX + 5];
int maxim;
int main()
{
fin = fopen("scmax.in", "r");
fout = fopen("scmax.out", "w");
int n;
fscanf(fin, "%d", &n);
int i;
for(i = 1; i <= n; i++)
fscanf(fin, "%d", &v[i]);
i = 1;
sol[i] = 1;
int j, ind;
prev[i] = -1;
for(i = 2; i <= n; i++)
{
maxim = ind = 0;
for(j = 1; j < i; j++)
if(v[j] < v[i])
if(sol[j] > maxim)
{
maxim = sol[j];
ind = j;
}
sol[i] = maxim + 1;
if(ind == 0)
prev[i] = -1;
else
prev[i] = ind;
}
//for(i = 1; i <= n; i++)
//fprintf(fout, "%d ", prev[i]);
maxim = 0;
int indmax;
for(i = 1; i <= n; i++)
{
if(sol[i] > maxim)
{
maxim = sol[i];
indmax = i;
}
}
fprintf(fout, "%d\n", maxim);
i = indmax;
int k = 0;
while(i != -1)
{
a[++k] = v[i];
i = prev[i];
//a[++k] = v[prev[i]];
}
for(i = k; i >= 1; i--)
fprintf(fout, "%d ", a[i]);
fclose(fin);
fclose(fout);
return 0;
}