Cod sursa(job #1970918)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 19 aprilie 2017 18:17:46
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
// cel mai lung subsir crescator.cpp : Defines the entry point for the console application.
//

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ofstream out("scmax.out");
ifstream in("scmax.in");

const int MAX = 100000;
int v[MAX], N, counter = 0 ;
vector<int>sol,el;


int best(int i){
    counter = 0 ;
	for (int j = i + 1; j < N; j++) {
		if (v[i] < v[j] && i < j) {
            if(counter == 0 ){
                counter = 2;
            }else{
                counter += 1;
            }

			el.push_back(v[j]);
		}
		if(j == N - 1){
			sol.push_back(counter);
			return counter;
		}

	}
    sol.push_back(counter);
    return counter;
}
void text(vector<int>v) {
	for (int i = 0; i < v.size(); i++) {
		cout << v[i]<<endl;
	}
}

void PD(int v[MAX]){
    if(N == 1){
        out<<N<<endl<<v[0];
        return  ;
    }
    if(N == 0){
        return;
    }

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

		best(i);
	}
	int best_length = 0,poz = 0 ;
	for (int i = 0; i < N; i++) {

		if (sol[i] >= best_length) {
			best_length = sol[i];
			poz = i;
		}
	}

	out << best_length << endl << v[poz]<<" ";
    sort(el.begin(), el.end());
    unique(el.begin(), el.end());
	for (int i = 0 ; i < best_length-1; i++) {
		out << el[i] << " ";
	}
	return;
}
void citire() {
	in >> N;
	for (int i = 0; i < N; i++) {
		in >> v[i];
	}

}


int main(){
	citire();
	PD(v);

	return 0;

}