Pagini recente » Cod sursa (job #2943671) | Cod sursa (job #2447483) | Cod sursa (job #1939941) | Cod sursa (job #1955680) | Cod sursa (job #1684742)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("scmax.in","r");
FILE *g=fopen("scmax.out","w");
int N,i,lmax,dr,st,last,mid;
int M[100005],P[100005],nr[100005],rez[100005];
int main()
{
fscanf(f,"%d",&N);
for(i=1;i<=N;i++)
{
fscanf(f,"%d",&nr[i]);
st=1;
dr=lmax;
last=0;
while(st<=dr)
{
mid=(st+dr)/2;
if(nr[M[mid]]<nr[i])
{
last=mid;
st=mid+1;
}
else
dr=mid-1;
}
P[i]=M[last];
if(last+1>lmax)
{
lmax=last+1;
M[lmax]=i;
}
else if(nr[M[last+1]]>nr[i])
M[last+1]=i;
}
fprintf(g,"%d\n",lmax);
for(i=M[lmax];i>0;i=P[i])
rez[++rez[0]]=nr[i];
for(i=rez[0];i>0;i--)
fprintf(g,"%d ",rez[i]);
fclose(f);
fclose(g);
return 0;
}