Cod sursa(job #2258586)

Utilizator AraldaAralda Pacurar Aralda Data 11 octombrie 2018 18:09:03
Problema Subsir crescator maximal Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 1.24 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

long long a[100000];
long long scmax[100000];

int main() {

	int n;	
	int scmax_len = 0;

	FILE* ip = fopen("scmax.in", "r");
	if (!ip) {

		perror("could not open input file");
		exit(1);
	}

	FILE* op = fopen("scmax.out", "w");
	if (!op) {

		perror("could not open output file");
		exit(1);
	}

	fscanf(ip, "%d", &n);

	for (int i = 0; i < n; i++) {

		fscanf(ip, "%lld", &a[i]);
	}

	int max_len = 1;
	int end_index = 0;

	int crt_len = 1;
	int crt_end = 0;

	for (int i = 1; i < n; i++) {

		if (a[i] >= a[i - 1]) {

			crt_len++;
			crt_end = i;
		}
		else {

			if (crt_len > max_len) {

				max_len = crt_len;
				end_index = crt_end;
			}

			crt_len = 1;
			crt_end = i;
		}
	}

	if (crt_len > max_len) {

		max_len = crt_len;
		end_index = crt_end;
	}

	scmax[0] = a[end_index - max_len + 1];
	scmax_len = 1;

	for (int i = end_index - max_len + 2; i <= end_index; i++) {

		if (a[i] != scmax[scmax_len - 1]) {

			scmax[scmax_len] = a[i];
			scmax_len++;
		}
	}

	fprintf(op, "%d\n", scmax_len);

	for (int i = 0; i < scmax_len; i++) {

		fprintf(op, "%lld ", scmax[i]);
	}

	fclose(ip);
	fclose(op);

	return 0;
}