Pagini recente » Cod sursa (job #3209044) | Cod sursa (job #2306677) | Cod sursa (job #393289) | Cod sursa (job #2836688) | Cod sursa (job #181612)
Cod sursa(job #181612)
# include <stdio.h>
# define input "scmax.in"
# define output "scmax.out"
# define max 200001
int a[max],v[max];
int i, n, p, sz;
int ant[max], val[max];
int sol[max];
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] = a[i];
val[sz] = i;
ant[i] = val[sz-1];
}
if(a[i] == v[sz]) continue;
p = search(a[i]) + 1;
v[p] = a[i];
ant[i] = val[p-1];
val[p] = i;
}
printf("%d\n",sz);
p = sz;
for(i = val[sz]; i; i=ant[i])
sol[p--] = a[i];
for(i = 1; i <= sz; i++)
printf("%d ",sol[i]);
return 0;
}