Pagini recente » Rezultatele filtrării | Cod sursa (job #2554669) | Cod sursa (job #2544676) | Cod sursa (job #708276) | Cod sursa (job #2347961)
#include<cstdio>
#define N 100001
#define M 3000000
int a[N],b[N],p[N],i,j,k,c,m,n,u,v,l,o;
char r[M];
int A()
{
int s=0;
for(;r[o]<'0'||r[o]>'9';o++);
for(;r[o]>='0'&&r[o]<='9';o++)
s=s*10+r[o]-'0';
return s;
}
void S(int b)
{
char e[100];
int j;
if(!b)
r[l++]=48;
for(j=0;b;b/=10,j++)
e[j]=b%10+48;
for(j--;j>=0;j--)
r[l++]=e[j];
}
int main()
{
freopen("scmax.in","r",stdin),freopen("scmax.out","w",stdout),fread(r,1,M,stdin),n=A();
for(i=1;i<=n;i++)
{
a[i]=A();
if(a[b[m]]<a[i])
p[i]=b[m],b[++m]=i;
for(j=0,k=m;j<k;)
a[b[(j+k)/2]]<a[i]?j=(j+k)/2+1:k=(j+k)/2;
if(a[i]<a[b[j]])
j?p[i]=b[j-1]:0,b[j]=i;
}
for(u=m,v=b[m];u--;v=p[v])
b[u]=v;
S(m),r[l++]='\n';
for(i=0;i<m;i++)
S(a[b[i]]),r[l++]=' ';
fwrite(r,1,l,stdout);
}