Pagini recente » Cod sursa (job #1190580) | Cod sursa (job #2228159) | Cod sursa (job #616888) | Cod sursa (job #2035301) | Cod sursa (job #189399)
Cod sursa(job #189399)
#include <stdio.h>
#include <algorithm>
#define mx 100010
long rez;
long a[mx],loc[mx],v[mx],g[mx];
void search(long p, long u, long x)
{
if (p>u)
return;
long m=(p+u)/2;
if (v[m-1]<x && v[m]>=x)
rez=m;
else if (v[m]>x)
search(p,m-1,x);
else search(m+1,u,x);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
long m=1,n,max=-1;
v[1]=LONG_MAX;
scanf("%ld",&n);
for (long i=1; i<=n; i++)
{
scanf("%ld",&a[i]);
search(1,m,a[i]);
v[rez]=a[i];
loc[i]=rez;
if (rez==m)
{
m++;
v[m]=LONG_MAX;
}
if (rez>max)
max=rez;
}
printf("%ld\n",max);
for (long i=n; i; i--)
if (loc[i]==max)
{
g[max]=a[i];
max--;
}
for (long i=1; g[i]; i++)
printf("%ld ",g[i]);
fclose(stdin);
fclose(stdout);
return 0;
}