Pagini recente » Cod sursa (job #1354243) | Cod sursa (job #1661500) | Cod sursa (job #1402402) | Cod sursa (job #1757687) | Cod sursa (job #2139687)
#include<fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int v[100005],L[100005],best[100005],p[100005],n,poz,maxim,nr;
void afis(int i)
{
if(p[i]>0) afis(p[i]);
cout<<v[i]<<' ';
}
int caut(int x)
{
int p=0,u=nr,m;
m=(p+u)/2;
while(p<=u)
{
if(v[L[m]]<x && v[L[m+1]]>=x) return m;
else if(v[L[m+1]]<x) {p=m+1; m=(p+u)/2;}
else {u=m-1; m=(p+u)/2;}
}
return nr;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>v[i];
cin.close();
nr=1; best[1]=L[1]=1;
for(int i=2;i<=n;i++)
{
poz=caut(v[i]);
p[i]=L[poz];
best[i]=poz+1;
L[poz+1]=i;
if(nr<poz+1) nr=poz+1;
}
for(int i=1;i<=n;i++)
{
if(maxim<best[i])
{
maxim=best[i];
poz=i;
}
}
cout<<maxim<<'\n';
afis(poz);
cout.close();
}