Pagini recente » Cod sursa (job #3219827) | Cod sursa (job #2913407) | Cod sursa (job #2479592) | Cod sursa (job #1903816) | Cod sursa (job #676668)
Cod sursa(job #676668)
#include<stdio.h>
const int inf= 1<<30;
int n,a[100001],l[100001],p[100001];
FILE *g=fopen("scmax.out","w");
void citire()
{
FILE*f=fopen("scmax.in","r");
fscanf(f,"%d",&n);
for(int i=1;i<=n;++i)
fscanf(f,"%d",&a[i]);
fclose(f);
}
int binara(int st,int dr,int val)
{
while(st<dr)
{
int m=(st+dr)/2;
if(l[m]<val)
st=m+1;
else dr=m;
}
return st;
}
int scmax()
{
int lg=0;
for(int i=1;i<=n;++i)
{
l[i]=inf;
int k=binara(1,lg+1,a[i]);
if(l[k]==inf)
++lg;
l[lg]=a[i];
p[i]=k;
}
return lg;
}
void reconstr(int n,int val)
{
for(int i=n;i>0;--i)
if(p[i]==val)
{
reconstr(i-1,val-1);
fprintf(g,"%d ",a[i]);
break;
}
}
int main()
{
citire();
int sol=scmax();
fprintf(g,"%d\n",sol);
reconstr(n,sol);
fclose(g);
return 0;
}