Pagini recente » Cod sursa (job #1545028) | Cod sursa (job #2083604) | Cod sursa (job #1174501) | Cod sursa (job #288849) | Cod sursa (job #1659117)
#include <stdio.h>
#include <stdlib.h>
int v[100001],p[100001],q[100001],S[100001];
int main()
{
FILE *fin,*fout;
fin=fopen ("scmax.in","r");
fout=fopen ("scmax.out","w");
int N,i,max=1,inf,sup,mid,pos;
fscanf (fin,"%d",&N);
fscanf (fin,"%d",&v[1]);
p[1]=1;
q[1]=v[1];
for (i=2; i<=N; i++)
{
fscanf (fin,"%d",&v[i]);
inf=1;
sup=max;
pos=0;
while (inf<=sup)
{
mid=(inf+sup)/2;
if (q[mid]<v[i])
{
inf=mid+1;
pos=mid;
}
else if (q[mid]>v[i])
{
sup=mid-1;
}
else if (q[mid]==v[i])
{
inf=sup+1;
pos=mid-1;
}
}
if (pos==0)
{
p[i]=1;
q[1]=v[i];
}
else
{
p[i]=pos+1;
q[pos+1]=v[i];
if (pos==max)
{
max++;
}
}
}
int m=max;
for (i=N; i>=1&&m>0; i--)
{
if (p[i]==m)
{
S[m--]=v[i];
}
}
fprintf (fout,"%d\n",max);
for (i=1; i<=max; i++)
{
fprintf (fout,"%d ",S[i]);
}
fclose (fin);
fclose (fout);
return 0;
}