Cod sursa(job #1785933)

Utilizator dancojocaruDan Cojocaru dancojocaru Data 22 octombrie 2016 09:55:12
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
using namespace std;

int inputc, input[100000], counter[100000];

void read() {
    FILE *f = fopen("scmax.in", "r");

    fscanf(f, "%i", &inputc);
    for (int i = 0; i < inputc; i++) fscanf(f, "%i", &input[i]);
}

void process() {
    counter[inputc - 1] = 1;
    for (int i = inputc - 2; i >= 0; i--) {
        int maximum = 0;
        for (int j = i + 1; j < inputc; j++) {
            if (input[j] > input[i] && maximum < counter[j]) {
                maximum = counter[j];
            }
        }
        counter[i] = 1 + maximum;
    }
}

void write() {
    FILE *g = fopen("scmax.out", "w");

    int previousno = 0, previousc = 0, previouspos;
    for (int i = 0; i < inputc; i++) {
        if (previousc < counter[i]) {
            previousc = counter[i];
            previousno = input[i];
            previouspos = i;
        }
    }
    fprintf(g, "%i\n%i ", previousc, previousno);
    for (int i = previouspos + 1; i < inputc; i++) {
        if (input[i] > previousno && counter[i] == previousc - 1) {
            fprintf(g, "%i ", input[i]);
            previousc = counter[i];
            previousno = input[i];
        }
    }
}

int main() {
	read();
	process();
	write();
}