Pagini recente » Cod sursa (job #1555972) | Cod sursa (job #1166409) | Cod sursa (job #2796340) | Cod sursa (job #1352290) | Cod sursa (job #1848159)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout("scmax.out");
int v[100010],p[100010],q[100010],z[100010],y,j;
int n,i,lq,pz,s,d,m,ant;
bool scd;
void cbin()
{
while (s<d)
{
m=(s+d)/2;
if (v[i]==q[m])
{
pz=m;
break;
}
else if (v[i]<q[m])
{
d=m-1;
scd=0;
}
else
{
s=m+1;
scd=1;
}
}
if (v[i]>q[d])
{
pz=s;
}
else pz=d;
}
int main()
{
fin >> n;
for (i=1;i<=n;++i)
{
fin >> v[i];
}
for (i=1;i<=n;++i)
{
if (v[i]>q[lq])
{
q[++lq]=v[i];
pz=lq;
}
else
{
s=1; d=lq;
cbin();
}
q[pz]=v[i];
p[i]=pz;
}
ant=n; // anterior
for (i=lq;i>=1;i--)
{
for (j=ant;j>=1;--j)
{
if (p[j]==i)
{
z[++y]=j;
ant = j;
break;
}
}
}
fout << lq << '\n';
for (i=y;i>=1;--i) fout << v[z[i]] <<' ';
return 0;
}