Cod sursa(job #709457)

Utilizator hunter_ionutzzzFarcas Ionut hunter_ionutzzz Data 8 martie 2012 09:42:15
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,nr,v[100001],val[100001],best[100001],par[100001],k,i,aux;
inline void caut_binar()
{int step;
    for (step=1;step<nr;step<<=1);
    for (aux=0;step;step>>=1)
        if (aux+step<nr && val[aux+step]<= v[i])
           aux += step;
}
int main()
{   fin >> n;
    for (i=1;i<=n;++i)
		fin >> v[i];
	for (i=1;i<=n;++i)
	{   if (v[i] > val[nr])
		{   val[++nr] = v[i];
			best[i] = nr;
			par[nr] = i;
		}
		else
		{   caut_binar();
			if (val[aux] != v[i])
			{   ++aux;
			    val[aux] = v[i];
                par[aux] = i;				
			    best[i] = aux;
			}
			else
				best[i] = aux;
		}
	}
	fout << nr << '\n';
	k = 1;
	for (i=1;i<=n;++i)
		if (best[i] == k)
		{   fout << v[i] << " ";
		    ++k;
		}	

	return 0;
}