Cod sursa(job #1356778)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 23 februarie 2015 16:22:38
Problema Subsir crescator maximal Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 100023
#define inf 2000000023
FILE *fin, *fout;
int n, maxn, poz, dr = 0, p;
struct ceva
{
	int val;
	int pos;
} v[NMAX], d[NMAX], temp;
bool comp(ceva a, ceva b)
{
	return (a.val <= b.val);
}
int main()
{
	fin = freopen("scmax.in", "r", stdin);
	fout = freopen("scmax.out", "w", stdout);
	scanf("%d", &n);
	for(int i = 0; i< n; ++i) scanf("%d", &v[i].val);
	for(int i = 0; i< n; ++i) d[i].val = inf;
	for(int i = 0; i< n; ++i)
	{
		poz = std::upper_bound(d, d+dr, v[i], comp) - d;
		v[i].pos = poz;
		if(poz > maxn) maxn = poz;
		dr = poz+1;
		d[poz].val = v[i].val;
		d[poz].pos = i+1;
	}
	printf("%d\n", maxn+1);
	v[n].pos = maxn+1;
	for(int i = 0; i< n; ++i)
	{
		if(v[i].pos == p && v[i+1].pos != p)
		{
			printf("%d ", v[i].val);
			p++;
		}
		if(p == maxn+1) break;
	}
	fclose(fin);
	fclose(fout);
	return 0;
}