Pagini recente » Cod sursa (job #94137) | Cod sursa (job #1972469) | Cod sursa (job #355275) | Cod sursa (job #2784646) | Cod sursa (job #803215)
Cod sursa(job #803215)
#include <cstdio>
#include <algorithm>
#define N 100001
using namespace std;
int L,s,d,m,n,i,a[N],b[N],c[N];
void afisare(int);
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
L=0;
for(i=1;i<=n;i++)
{
s=0;
d=L+1;
if(a[i]>a[c[L]])
{
L++;
c[L]=i;
b[i]=c[L-1];
continue;
}
s=0;
d=L;
for(;d-s-1;)
{
m=(s+d)/2;
if(a[i]>a[c[m]])
s=m;
else d=m;
}
b[i]=c[s];
if(a[i]<a[c[d]])
c[d]=i;
}
printf("%d\n",L);
afisare(c[L]);
return 0;
}
void afisare(int x)
{
if(x==0)return ;
afisare(b[x]);
printf("%d ",a[x]);
}