Pagini recente » Cod sursa (job #516854) | Cod sursa (job #36649) | Cod sursa (job #1350014) | Cod sursa (job #2095777) | Cod sursa (job #1766646)
#include <cstdio>
using namespace std;
int v[100001],d[100001],t[100001],sol[100001];
FILE *fin=fopen ("scmax.in","r");
FILE *fout=fopen ("scmax.out","w");
int main()
{
int ed,i,st,dr,mid,el,x,n;
fscanf (fin,"%d",&n);
for (i=1;i<=n;i++)
fscanf (fin,"%d",&v[i]);
ed=1;
d[1]=1;
for (i=2;i<=n;i++){
st=1;
dr=ed;
while (st<=dr){
mid=(st+dr)/2;
if (v[d[mid]]>v[i])
dr=mid-1;
else st=mid+1;
}
if (st==ed+1)
ed++;
d[st]=i;
t[i]=d[st-1];
}
fprintf (fout,"%d\n",ed);
x=d[ed];
el=0;
while (x){
sol[++el]=v[x];
x=t[x];
}
for (i=el;i>0;i--)
fprintf (fout,"%d ",sol[i]);
return 0;
}