Pagini recente » Cod sursa (job #326140) | Cod sursa (job #876013) | Cod sursa (job #2937725) | Cod sursa (job #182788) | Cod sursa (job #1883501)
#include <cstdio>
#include <algorithm>
using namespace std;
int n, i, a[100001], poz[100001], Max,p, u, k, pozm,m, prim, j, l[100001];
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]);
}
a[0]=2000000001;
for (i=n; i>0; i--){
poz[i]=0;
p=1; u=Max;
while (p<=u){
m=p+(u-p)/2;
if (a[i]<a[l[m]]) p=m+1;
else u=m-1;
}
k=p;
if (k>Max){
poz[i]=l[k-1];
Max=k;
l[k]=i;
}
else{
poz[i]=l[k-1];
if (a[l[k]]<a[i]) l[k]=i;
}
}
printf("%d\n", Max);
for (i=l[Max]; i>0; i=poz[i])
printf("%d ", a[i]);
return 0;
}