Cod sursa(job #544211)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 1 martie 2011 10:49:11
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cstdio>
#define NMAX 100005
using namespace std;

int V[NMAX], N, Q[NMAX], P[NMAX], S[NMAX], lenP, lenQ;

void read(void)
{
	FILE *f = fopen("scmax.in", "r");
	fscanf(f, "%d", &N);
	for(int i = 1; i <= N; ++i)
		fscanf(f, "%d", &V[i]);
	fclose(f);
}

void insert(int x)
{
	for(int i = 1; i <= lenQ; ++i)
		if(x <= Q[i])
		{
			Q[i] = x;
			P[++lenP] = i;
			return;
		}
	Q[++lenQ] = x;
	P[++lenP] = lenQ;
}
void solve(void)
{
	P[1] = lenQ = lenP = 1, Q[1] = V[1];
	for(int i = 2; i <= N; ++i)
		insert(V[i]);
	for(int i = lenQ, j = lenP; i; --i)
	{
		while(P[j] != i)
			--j;
		S[i] = j;
	}
}
void print(void)
{
	FILE *g = fopen("scmax.out", "w");
	fprintf(g, "%d\n", lenQ);
	for(int i = 1; i <= lenQ; ++i)
		fprintf(g, "%d ", V[ S[i] ]);
	
	fclose(g);
}
int main(void)
{
	read();
	solve();
	print();
	
	return 0;
}