Pagini recente » Cod sursa (job #1557086) | Cod sursa (job #1410675) | Cod sursa (job #1857600) | Cod sursa (job #424370) | Cod sursa (job #949141)
Cod sursa(job #949141)
#include <iostream>
#include<stdio.h>
using namespace std;
int a[100005],v[100005],p[100005],n,maxim;
int cautbin(int val, int vct[])
{
int mij,st,dr,pos=0;
st=1;
dr=vct[0];
while(st<=dr&&pos==0)
{
mij=(st+dr)/2;
if(vct[mij]==val)
pos=mij;
else
if(vct[mij]>val)
dr=mij-1;
else st=mij+1;
}
if(pos==0)
return st;
return pos;
}
void sir()
{
v[0]=p[1]=1;
v[1]=a[1];
int i;
for(i=2;i<=n;i++)
{
if(a[i]>v[v[0]])
{
v[0]++;
v[v[0]]=a[i];
p[i]=v[0];
}
else
{
p[i]=cautbin(a[i],v);
v[p[i]]=a[i];
}
if(p[i]>maxim)
maxim=p[i];
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sir();
printf("%d\n",v[0]);
for(int i=1;i<=v[0];i++)
printf("%d ",v[i]);
printf("\n");
return 0;
}