Pagini recente » Cod sursa (job #1982233) | Cod sursa (job #1907900) | Cod sursa (job #521432) | Cod sursa (job #2290252) | Cod sursa (job #1374576)
#include <cstdio>
#define nmax 100100
using namespace std;
int i, n, m, l, r, pos, k, j;
int sol[nmax], ll[nmax], a[nmax];
int main()
{
freopen("scmax.in", "rt", stdin);
freopen("scmax.out", "wt", stdout);
scanf("%d", &n);
for(i=1; i<=n; ++i)
scanf("%d", &a[i]);
k=0; sol[0]=0;
for(i=1; i<=n; ++i)
if(a[i]>sol[k]) sol[++k]=a[i], ll[i]=k;
else
{
l=1, r=k, pos=k;
while(l<=r)
{
m=(l+r)/2;
if(sol[m]<a[i]) l=m+1;
else pos=m, r=m-1;
}
sol[pos]=a[i];
ll[i]=pos;
}
printf("%d\n", k);
for(i=n, j=0; i>0 && k; --i)
if(ll[i]==k) sol[++j]=a[i], --k;
for(i=j; i>0; --i)
printf("%d ", sol[i]);
return 0;
}