Pagini recente » Cod sursa (job #466545) | Cod sursa (job #202241) | Borderou de evaluare (job #366906) | Cod sursa (job #1980079) | Cod sursa (job #282925)
Cod sursa(job #282925)
#include <cstdio>
#include <cstdlib>
#define DIM 100002
int v[DIM], l[DIM] = {-1}, p[DIM] = {1}, n;
void cmlsc()
{
l[1] = 1;
p[1] = -1;
for (int i = 1; i <= n; i++)
{
l[i] = 1;
p[i] = -1;
for(int j = i - 1; j ; j--)
if (v[i] > v[j] && l[i] > l[j] + 1)
l[i] = l[j] + 1, p[j] = i;
}
}
int max()
{
int x = -1, ibun;
for (int i = 1; i <= n; i++)
if (x < l[i])
x = l[i], ibun = i;
return ibun;
}
void afis()
{
FILE *f = fopen("scmax.out", "w");
/* int i;
for (i = 1; i <= n; i++)
printf ("%3d",v[i]);
printf ("\n");
for (i = 1; i <= n; i++)
printf ("%3d",l[i]);
printf ("\n");
for (i = 1; i <= n; i++)
printf ("%3d",p[i]);
*/
int poz = max();
fprintf (f, "%d\n", l[poz]);
while (poz != -1)
{
fprintf (f, "%d ", v[poz]);
//system("pause");
poz = p[poz];
}
fclose(f);
}
int main()
{
FILE *f = fopen("scmax.in", "r");
fscanf(f, "%d", &n);
int i;
for (i = 1; i <= n; i++)
fscanf(f, "%d", &v[i]);
fclose(f);
cmlsc();
afis();
return 0;
}