Cod sursa(job #1391577)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 18 martie 2015 01:49:05
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#define NMAX 100023
#define inf 2000000023
using namespace std;
FILE *fin, *fout;
int n, v[NMAX], dr = 2, temp, maxn, p, tata[NMAX];
void afisare(int a)
{
	if(tata[a] == 0)
	{
		printf("%d ", v[a]);
		return ;
	}
	afisare(tata[a]);
	printf("%d ", v[a]);
}
struct queue
{
	int val;
	int pos;
} q[NMAX];
int main()
{
	fin = freopen("scmax.in", "r", stdin);
	fout = freopen("scmax.out", "w", stdout);
	scanf("%d", &n);
	for(int i = 1 ; i<= n; i++) scanf("%d", &v[i]);
	for(int i = dr; i<= n; i++) q[i].val = inf;
	for(int i = 1; i<= n; i++)
	{
		temp = dr;
		while(temp > 1 && q[temp-1].val >= v[i])
		{
			temp--;
		}
		q[temp].val = v[i];
		q[temp].pos = i;
		tata[i] = q[temp-1].pos;
		if(temp == dr) dr++;
		if(temp-1 > maxn) {maxn = temp-1;p = i;}
	}
	printf("%d\n", maxn);
	afisare(p);
	printf("\n");
	fclose(fin);
	fclose(fout);
	return 0;
}