Pagini recente » Cod sursa (job #3148140) | Cod sursa (job #266584) | Cod sursa (job #100006) | Cod sursa (job #137569) | Cod sursa (job #1333181)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100001],w[100001],p[100001],i,j,n,ld,ls,mij,m,k;
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>v[i];
if(v[i]<w[m])
{
ls=1;ld=m;
while(ld>ls)
{
mij=(ld+ls)/2;
if(w[mij]==v[i])
{
p[i]=p[mij];break;
}
else
if(w[mij]>v[i])
{ld=mij-1;}
else
ls=mij+1;
}
if(ld<=ls)
{while(w[ld]<v[i])
ld++;
w[ld]=v[i];
p[i]=ld;
}
}
if(v[i]>w[m])
{
m++;
w[m]=v[i];
p[i]=m;
}
}i=n;
fout<<m<<"\n";n=m;
while(m)
{
if(p[i]==m)
{
w[m]=v[i];
m--;
}
i--;
}
for(i=1;i<=n;i++)
fout<<w[i]<<" ";
return 0;
}