Cod sursa(job #3242531)

Utilizator Commander_XDunel Stefan-Octavian Commander_X Data 12 septembrie 2024 15:41:56
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
//https://www.infoarena.ro/problema/scmax
#include <fstream>
#include <vector>

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

using namespace std;

int max(int a, int b)
{
	return a > b ? a : b;
}

vector<int> v, dp, t;
void drum(int u)
{
	if (u)
	{
		drum(t[u]);
		fout << v[u] << ' ';
	}
}
int main()
{
	int n, p, st, dr, m, mid;
	fin >> n;
	v.resize(n + 1);
	t.resize(n + 1, 0);
	dp.resize(n + 1, 0);
	for (int i = 1; i <= n; ++i)
		fin >> v[i];

	m = 1;
	dp[1] = 1;
	for (int i = 2; i <= n; ++i)
	{
		st = 1;
		dr = m;
		while (st <= dr)
		{
			mid = st + (dr - st) / 2;
			if (v[dp[mid]] >= v[i])
				dr = mid - 1;
			else
				st = mid + 1;
		}
		if (st > m)
		{
			m++;
			dp[m] = i;
			t[i] = dp[st - 1];
		}
		else
		{
			dp[st] = i;
			t[i] = dp[st - 1];
		}
	}
	fout << m << '\n';
	drum(dp[m]);
}