Pagini recente » Cod sursa (job #856081) | Cod sursa (job #1080086) | Cod sursa (job #1251922) | Cod sursa (job #2041886) | Cod sursa (job #3215277)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int N=100002;
int n,lmax,v[N],l[N],poz[N];
void print(int l,int i)
{
if(i==0)
return;
if(poz[i]==l)
{
print(l-1,i-1);
cout<<v[i]<<' ';
}
else print(l,i-1);
}
int cb(int dr,int x)
{
int st=1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(l[mij]>=x)
dr=mij-1;
else
st=mij+1;
}
return st;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
l[1]=1;
v[1]=1;
lmax=1;
for(int i=2;i<=n;i++)
{
if(v[i]>l[lmax])
{
poz[i]=lmax+1;
l[++lmax]=v[i];
}
else if(v[i]<l[lmax])
{
poz[i]=cb(lmax,v[i]);
l[poz[i]]=v[i];
}
}
cout<<lmax-1<<'\n';
print(lmax,n);
return 0;
}