Cod sursa(job #535124)

Utilizator Catah15Catalin Haidau Catah15 Data 16 februarie 2011 19:58:33
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
// SCMAX N logN

#include <fstream>
#include <iostream>
#define MAXN 100005
using namespace std;

int n, v[MAXN], best[MAXN], a[MAXN], dima, maxim, ant[MAXN], pozz, sol[MAXN];

int bin_Search(int x)
{
	int st = 0, dr = dima, mid;
	
	while(st <= dr)
	{
		mid = (st + dr) / 2;
		
		if(v[a[mid]] < x && v[a[mid + 1]] >= x)
			return mid;
		else
		if(v[a[mid + 1]] < x)
			st = mid + 1;
			else
				dr = mid - 1;
	}
	
	return dima;
	
}

int main()
{
	ifstream f("scmax.in");
	ofstream g("scmax.out");
	
	f >> n;
	
	best[1] = a[1] = 1;
	
	for(int i = 1; i <= n; ++i)
	{
		f >> v[i];
		
		int poz = bin_Search(v[i]);
		
		ant[i] = a[poz];
		
		best[i] = poz + 1;
		
		a[poz + 1] = i;
		
		
		
		if(maxim < best[i])
		{	
			maxim = best[i];
			pozz = i;
		}
		
		if(poz + 1 > dima)
			dima = poz + 1;
	}
	
	g << maxim << '\n';
	
	int dim = 0;
	int i;
	for(i = pozz; ant[i] > 0; i = ant[i])
		sol[++dim] = v[i];
	g << v[i] << " ";
	for(int i = dim; i >= 1; --i)
		g << sol[i] << " ";
	
}