Pagini recente » Cod sursa (job #2296707) | Cod sursa (job #3143417) | Cod sursa (job #2275417) | Cod sursa (job #2197938) | Cod sursa (job #1044356)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int MAXN=1010;
int L,n;
int best[MAXN],tata[MAXN],H[MAXN],v[MAXN];
int BS(int x)
{
int step,i=0;
for(step=1;step<L;step<<=1);
for(;step;step>>=1)
if(i+step<=L&&v[H[step+i]]<x)
i+=step;
return i;
}
void afisare(int i)
{
if(tata[i])
afisare(tata[i]);
out<<v[i]<<" ";
}
int main()
{
in>>n;
int i,now;
for(i=1;i<=n;i++)
in>>v[i];
for(i=1;i<=n;i++)
{
now=BS(v[i]);
best[i]=best[H[now]]+1;
tata[i]=H[now];
if(now==L)
H[++L]=i;
else
if(v[H[now+1]]>v[i])
H[now+1]=i;
}
out<<L<<"\n";
for(i=1;i<=n;i++)
if(best[i]==L)
{
afisare(i);
return 0;
}
return 0;
}