Cod sursa(job #2354977)

Utilizator Paulet.StefanPauletStefan Paulet.Stefan Data 25 februarie 2019 18:48:46
Problema Subsir crescator maximal Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define LMAX 1000005

using namespace std;

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

int a[LMAX], C[LMAX], poz[LMAX];
int n, lgc;

int cautbinar(int x);

int main()
{
	int i, x, pozitia, elemcur;
    fin >> n;
    for (i = 1; i <= n; i ++)
		fin >> a[i];
	for (i = 1; i <= n; i ++)
	{
		x = a[i];
		if (x >= C[lgc])
			C[++ lgc] = x;
		else
		{
			pozitia = cautbinar(x);
			C[pozitia] = x;
			poz[x] = pozitia;
		}
	}
	fout << lgc << '\n';
	elemcur = lgc;
	for (i = n; i >= 1; i --)
	{
		if (poz[i] == elemcur)
		{
			C[elemcur] = a[i];
			elemcur --;
		}
	}
	for (i = 1; i <= lgc; i ++)
		fout << C[i] << ' ';
    return 0;
}

int cautbinar(int x)
{
	int st, dr, mij;
	for (st = 0, dr = lgc + 1; dr - st > 1;)
	{
		mij = (st + dr) / 2;
		if (x > C[mij])
			st = mij;
		else
			dr = mij;
	}
	return dr;
}