Pagini recente » Cod sursa (job #2599571) | Cod sursa (job #1055270) | Cod sursa (job #2117102) | Cod sursa (job #1041623) | Cod sursa (job #174873)
Cod sursa(job #174873)
#include <cstdio>
#define maxn 100001
int a[maxn], x[maxn],p[maxn],poz[maxn],sol[maxn];
int n;
void solve()
{
x[1]=a[1];
poz[1]=1;
int nr=1,j,v,i,cnt;
for(i=2;i<=n;++i)
{
v=a[i];
for(j=1,cnt=(1<<18); cnt; cnt>>=1)
if(j+cnt<=nr)
if(x[j+cnt]<v) j+=cnt;
if(x[j]<=v) ++j;
if(j>nr) nr=j;
x[j]=v;
p[i]=poz[j-1];
poz[j]=i;
}
freopen("scmax.out","w",stdout);
printf("%d\n", nr);
int N=0;
for(i=poz[nr]; i; i=p[i])sol[++N]=a[i];//printf("%d ", a[i]);
for(i=N;i>=1;--i)printf("%d ", sol[i]);
printf("\n");
}
int main()
{
freopen("scmax.in","r",stdin);
scanf("%d\n", &n);
for(int i=1;i<=n;++i) scanf("%d ", a+i);
solve();
return 0;
}