Cod sursa(job #2910125)

Utilizator radu.seitanSeitan Radu-Catalin radu.seitan Data 18 iunie 2022 15:55:45
Problema Subsir crescator maximal Scor 40
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#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;
}