Cod sursa(job #1469974)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 10 august 2015 00:18:21
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb

#include <iostream>
#include <algorithm>
#include <fstream>
#define MAX 100015
using namespace std;
int n, a[MAX];
int p[MAX], d[MAX];
fstream f, g;
void write (int maxim, int ind)
{
	if (maxim == 0) 
		return ;
	int ind2;
	for (ind2 = ind; ind2 >=1 ;ind2--)
	{
		if (p[ind2] ==  maxim -1 && a[ind2] < a[ind])
		{
			write(maxim-1, ind2);
			break;
		}

	}
	g<< a[ind] <<" ";
}
int main(void)
{
	int crt = 0, indice;
	f.open("scmax.in", ios::in);
	g.open("scmax.out", ios::out);
	f >> n;
	int i;
	for (i = 1; i <= n; i++)
		f >> a[i];
	d[++crt] = a[1];
	p[crt] = 1;

	for (i = 2; i <= n; ++i)
	{
		if (d[1] > a[i]) {
			d[1] = a[i];
			p[i] = 1;
		}
		else if (d[crt] < a[i])
		{
			d[++crt] = a[i];
			p[i] = crt;
		}
		else
		{
			int *ind;
			ind = lower_bound (d + 1 , d + crt + 1, a[i]);
			//cout << ind  << '\n';
	
			d[ind - d  ] = a[i];
			p[i] = ind - d ;
		}
	}
	int maxim = -1;
    for (i = 1 ; i <= n ; i++)
    {

    	if(maxim < p[i])
    	{
        	maxim = p[i];
        	indice = i;
        }
    }
	g << maxim << '\n';
	write(maxim, indice);
}