Pagini recente » Cod sursa (job #377201) | Cod sursa (job #1762516) | Cod sursa (job #541929) | Cod sursa (job #3143631) | Cod sursa (job #1401887)
#include <fstream>
#define N 100003
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int n,r,v[N],b[N],l[N];
int cauta (int k)
{
int a=1,b=r,m;
while(a<b)
{
m=(a+b)/2;
if(k>l[m])
a=m+1;
if(k<=l[m])
b=m;
}
return a;
}
void afis(int k, int h)
{
if(k)
{
while(b[h]!=k)
h--;
afis(k-1,h-1);
out<<v[h]<<" ";
}
}
int main()
{
int i,j,p;
in>>n;
for(i=1;i<=n;i++)
in>>v[i];
l[++r]=v[1];
b[1]=1;
for(i=2;i<=n;i++)
{
if(v[i]>l[r])
{
r++;
l[r]=v[i];
b[i]=r;
}
else
{
p=cauta(v[i]);
if(l[p]>v[i])
l[p]=v[i];
b[i]=p;
}
}
out<<r<<'\n';
afis(r,n);
return 0;
}