Cod sursa(job #484352)

Utilizator petroMilut Petronela petro Data 13 septembrie 2010 20:16:24
Problema Subsir 2 Scor 36
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<fstream>
#define M 5004
using namespace std;

ifstream f("subsir2.in");
ofstream g("subsir2.out");

int n,m,v[M],l[M],poz[M];

int main()
{
	f>>n;
	
	int i,x,y,mij,k;
	m=0;
	
	for(i=1;i<=n;++i)
	{
		f>>v[i];
		x=1;
		y=m;
		k=0;
		
		while(x<=y)
		{
			mij=(x+y)/2;
			if(l[mij]>v[i]) {y=mij-1;
							 k=mij;}
			else if(l[mij]<v[i]) x=mij+1;
			     else {k=mij; break;}
		}
		
		if(k==0) {++m;
				  k=m;}
		l[k]=v[i];
		poz[i]=k;
	}
	
	for(i=m;i>0;--i)
	{
		while(n && poz[n]!=i)
			--n;
		l[i]=v[n];
	}
	
	g<<m<<"\n";
	for(i=1;i<=m;++i)
		g<<l[i]<<" ";
	g<<"\n";
	
	f.close();
	g.close();
	return 0;
}