Pagini recente » Cod sursa (job #184335) | Cod sursa (job #2367469) | Cod sursa (job #2441986) | Cod sursa (job #113188) | Cod sursa (job #886693)
Cod sursa(job #886693)
#include <cstdio>
#define FIN "scmax.in","r",stdin
#define FOUT "scmax.out","w",stdout
using namespace std;
int n,i,pos,lg,j;
int a[100001],bst[100001],poz[100001],sol[100001];
int search(int x)
{
int p=1,u=lg,m;
while(p<=u)
{
m=(p+u)/2;
if(bst[m]>=x && bst[m-1]<x)return m;
if(bst[m-1]<x)p=m+1;
else u=m-1;
}
return ++lg;
}
void afis(int pos)
{
if(poz[pos]>0)afis(poz[pos]);
printf("%d ",a[pos]);
}
int main()
{
freopen(FIN);
freopen(FOUT);
scanf("%d",&n);
for(i=1;i<=n;i++){scanf("%d",&a[i]);bst[i]=2000000000;}
bst[0]=-1;
for(i=1;i<=n;i++)
{
pos=search(a[i]);
bst[pos]=a[i];
poz[i]=pos;
}
printf("%d\n",lg);
pos=n;
for(i=lg;i>0;i--)
{
while(poz[pos]!=i)pos--;
sol[i]=a[pos];
}
for(i=1;i<=lg;i++)printf("%d ",bst[i]);
//for(i=1;i<=lg;i++)printf("%d ",sol[i]);
return 0;
}