Pagini recente » Cod sursa (job #2305613) | Cod sursa (job #1598368) | Cod sursa (job #1896635) | Cod sursa (job #1020027) | Cod sursa (job #1089771)
#include <fstream>
#define NMAX 100005
using namespace std;
FILE* f=freopen("scmax.in","r",stdin);
FILE* o=freopen("scmax.out","w",stdout);
int n;
int v[NMAX];
int b[NMAX],lb,p[NMAX];
void WriteSequence(int i, int ind)
{
if(ind==0) return;
if(p[i]==ind)
{
WriteSequence(i-1,ind-1);
printf("%d ",v[i]);
}
else
WriteSequence(i-1,ind);
}
int Insert(int x)
{
if(b[lb]<x) { b[++lb]=x; return lb; }
int poz,i;
for(i=1;i<=lb;i<<=1);
for(poz=0;i;i>>=1)
if(poz+i<=lb&&b[poz+i]<x)
poz+=i;
b[poz+1]=x;
return poz+1;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&v[i]);
p[i]=Insert(v[i]);
}
printf("%d\n",lb);
WriteSequence(n,lb);
return 0;
}