Pagini recente » Cod sursa (job #450552) | Cod sursa (job #2441725) | Cod sursa (job #1150531) | Cod sursa (job #1384437) | Cod sursa (job #181596)
Cod sursa(job #181596)
# include <stdio.h>
# define input "scmax.in"
# define output "scmax.out"
# define max 100001
int a[max],v[max],ret[max];
int i, n, p, sz;
int search(int x)
{
int pow,pos;
for(pow = 1; pow <= sz; pow<<=1);
for(pos = 0; pow; pow>>=1 )
if(pos+pow <= sz && v[pos+pow] < x) pos+=pow;
return pos;
}
int main()
{
freopen(input,"r", stdin);
freopen(output,"w", stdout);
scanf("%d ",&n);
for(i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
if(a[i] > v[sz])
v[++sz] = ret[sz] = a[i];
if(a[i] == v[sz]) continue;
p = search(a[i]) + 1;
v[p] = a[i];
if(p == sz) ret[sz] = a[i];
}
printf("%d\n",sz);
for( i = 1; i <= sz; i++)
printf("%d ",ret[i]);
return 0;
}