Pagini recente » Cod sursa (job #1887990) | Cod sursa (job #937115) | Cod sursa (job #1394611) | Cod sursa (job #2891282) | Cod sursa (job #1043803)
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, a[100002],b[100002], c[100002], lmax;
int cb(int a[], int b[], int p, int q, int v)
{
int mij;
while (p<=q)
{
mij=p+(q-p)/2;
if (v<a[b[mij]]) p=mij+1;
else q=mij-1;
}
return p;
}
int main()
{
int i,l;
fin>>n;
for (i=1;i<=n;i++)
{
fin>>a[i];
}
a[0]=2100000000;
b[0]=0;
lmax=0;
for (i=n;i>=1;i--)
{
l=cb(a,b,0,lmax,a[i]);
if (l>lmax)
{
c[i]=b[l-1];
lmax=l;
b[l]=i;
}
else
{
c[i]=b[l-1];
if (a[b[l]]<a[i])
{
b[l]=i;
}
}
}
fout<<lmax<<"\n";
for (i=b[lmax];i>0;i=c[i])
{
fout<<a[i]<<" ";
}
fin.close();
fout.close();
return 0;
}