Cod sursa(job #2355163)

Utilizator musalaulMusu Miprian musalaul Data 25 februarie 2019 21:12:03
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;

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

const int MX = 100005;

int n, lg, v[MX], aux[MX], pos[MX];

int main()
{
    fin >> n;

    for (int i = 1; i <= n; ++i)
		fin >> v[i];

    aux[++lg] = v[1];
    pos[1] = 1;

	for (int i = 2; i <= n; ++i)
	{
		if (v[i] > aux[lg])
        {
            aux[++lg] = v[i];
            pos[i] = lg;
        }
		else
		{
			int p = lower_bound(aux + 1, aux + lg + 1, v[i]) - aux;
			aux[p] = v[i];
			pos[i] = p;
		}
	}

	fout << lg << "\n";

	int ec = lg;

	for (int i = n; i >= 1; --i)
		if (pos[i] == ec)
		{
			aux[ec] = v[i];
			--ec;
		}

	for (int i = 1; i <= lg; ++i)
		fout << aux[i] << " ";

    return 0;
}