Pagini recente » Cod sursa (job #2857573) | Cod sursa (job #2890151) | Cod sursa (job #771515) | Cod sursa (job #47729) | Cod sursa (job #2910125)
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* f = fopen("scmax.in", "r"), * g = fopen("scmax.out", "w");
int N = 0, * vectorul_de_lungimi = NULL, * A = NULL, lungimea_maxima = 0, numarul_de_repetitii = 0;
int i = 0, j = 0, ok = 0, pozitia_lungimii_maxime = 0;
fscanf(f, "%d", &N);
A = (int*)malloc(N * sizeof(int));
vectorul_de_lungimi = (int*)malloc(N * sizeof(int));
for (i = 0; i < N; i++)
fscanf(f, "%d", &A[i]);
for (i = 0; i < N; i++)
vectorul_de_lungimi[i] = 1;
for (i = N - 2; i >= 0; i--)
{
ok = 0;
for (j = i + 1; j < N; j++)
if (A[i] < A[j])
{
if (vectorul_de_lungimi[i] < 1 + vectorul_de_lungimi[j])
vectorul_de_lungimi[i] = 1 + vectorul_de_lungimi[j];
}
else
if (A[i] == A[j] && ok == 0)
{
numarul_de_repetitii++;
ok = 1;
}
}
lungimea_maxima = vectorul_de_lungimi[0];
for (i = 1; i < N; i++)
if (vectorul_de_lungimi[i] > lungimea_maxima)
{
lungimea_maxima = vectorul_de_lungimi[i];
pozitia_lungimii_maxime = i;
}
fprintf(g, "%d\n", lungimea_maxima);
fprintf(g, "%d ", A[pozitia_lungimii_maxime]);
for (i = pozitia_lungimii_maxime + 1; i <= pozitia_lungimii_maxime + lungimea_maxima + numarul_de_repetitii - 1; i++)
if (A[i] != A[i - 1])
fprintf(g, "%d ", A[i]);
fclose(f);
fclose(g);
free(A);
free(vectorul_de_lungimi);
return 0;
}