Pagini recente » vacanta_10_5 | Borderou de evaluare (job #621500) | Borderou de evaluare (job #2055057) | Borderou de evaluare (job #3174647) | Cod sursa (job #748290)
Cod sursa(job #748290)
#include<fstream>
using namespace std;
int v[100001],u[100001],L[100001],l;
ifstream f("scmax.in");
ofstream g("scmax.out");
int functie(int i,int j,int x)
{
int m;
if(i>j)return l;
m=(i+j)/2;
if(v[L[m]]<x and x<=v[L[m+1]])return m;
else if(x>v[L[m+1]])return functie(m+1,j,x);
else return functie(i,m-1,x);
}
void dr(int i)
{
if(i)
{
dr(u[i]);
g<<v[i]<<" ";
}
}
int main ()
{
int n,i,ret,max,poz=1;
f>>n;
for(i=1;i<=n;++i)
f>>v[i];
L[1]=1;
l=1;
for(i=2;i<=n;++i)
{
ret=functie(0,l,v[i]);
u[i]=L[ret];
L[ret+1]=i;
if(l<ret+1){l=ret+1;poz=i;}
}
g<<l<<"\n";
dr(poz);
f.close();
g.close();
}