Cod sursa(job #2630348)

Utilizator sebimihMihalache Sebastian sebimih Data 25 iunie 2020 13:46:39
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

vector<int> vec, poz, dp;

void Adaugare(int x)
{
	int inc = 0;
	int sf = dp.size() - 1;

	while (inc <= sf)
	{
		int mid = (inc + sf) / 2;

		if (dp[mid] < x)
		{
			inc = mid + 1;
		}
		else
		{
			sf = mid - 1;
		}
	}

	if (inc >= (int)dp.size())
	{
		dp.push_back(x);
		poz.push_back(inc);
	}
	else
	{
		dp[inc] = x;
		poz.push_back(inc);
	}
}

int main()
{
	int n;
	fin >> n;

	vec.resize(n + 1);
	for (int i = 0; i < n; i++)
	{
		fin >> vec[i];
		Adaugare(vec[i]);
	}

	int NrCautat = dp.size() - 1;
	vector<int> Sir;
	for (int i = poz.size() - 1; i >= 0; i--)
	{
		if (poz[i] == NrCautat)
		{
			Sir.push_back(vec[i]);
			NrCautat--;
		}
	}

	fout << dp.size() << '\n';
	for (int x = Sir.size() - 1; x >= 0; x--)
	{
		fout << Sir[x] << ' ';
	}
}

/*

	6
	2 5 7 3 4 1

	

*/