Cod sursa(job #2545033)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 12 februarie 2020 19:43:10
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
//ALEXANDRU MICLEA

#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>

using namespace std;

///#include <iostream>
#include <fstream>
ifstream cin("scmax.in"); ofstream cout("scmax.out");

//VARIABLES
int n;
int v[100005];
int best[100005];
int last[100005];
int MAX = 1;
int pos;

vector <int> ans;

//FUNCTIONS



//MAIN
int main() {

	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> v[i];
		best[i] = 1;
	}

	for (int i = 1; i < n; i++) {
		for (int j = i + 1; j <= n; j++) {
			if (v[i] < v[j] && best[i] >= best[j]) {
				best[j] = best[i] + 1;
				last[j] = i;
				if (best[j] > MAX) {
					MAX = best[j];
					pos = j;
				}
			}
		}
	}
	cout << MAX << '\n';
	/*for (int i = 1; i <= n; i++) {
		cout << best[i] << " ";
	}
	cout << '\n';
	for (int i = 1; i <= n; i++) {
		cout << last[i] << " ";
	}
	cout << '\n';*/

	int i;
	i = pos;
	while (i) {
		ans.push_back(v[i]);
		i = last[i];
	}

	reverse(ans.begin(), ans.end());
	for (auto& x : ans) { 

		cout << x << " ";
	}

	return 0;
}