Pagini recente » Cod sursa (job #2652919) | Cod sursa (job #46815) | Cod sursa (job #2930335) | Cod sursa (job #729858) | Cod sursa (job #2206723)
#include<fstream>
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int poz[100005];
int v[100005];
int vf[100005];
int vv[100005];
int main()
{
int n,nr,i,l=1,st,dr,m,x;
cin>>n>>nr;
vv[1]=nr;
poz[1]=1;
v[1]=nr;
for (i=2;i<=n;i++)
{
cin>>nr;
vv[i]=nr;
st=1;
dr=l;
if(nr>v[l])
{
l++;
v[l]=nr;
poz[i]=l;
}
else
{
while (st<=dr)
{
m=(st+dr)/2;
if (v[m]<nr)
st=m+1;
else
{
dr=m-1;
x=m;
}
}
v[x]=nr;
poz[i]=x;
}
}
cout<<l<<endl;
x=l;
i=n;
while (i>0)
{
if (poz[i]==x)
{
vf[x]=vv[i];
x--;
}
i--;
}
for (i=1;i<=l;i++)
cout<<vf[i]<<" ";
return 0;
}