Pagini recente » Cod sursa (job #1158989) | Cod sursa (job #714207) | Cod sursa (job #2083919) | Cod sursa (job #2244729) | Cod sursa (job #1903187)
#include <cstdio>
#include <cstdlib>
using namespace std;
int n, a[100001], i, l[100001], poz[100001], m, Max, p, u, k;
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]=2000000000;
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){
Max=k;
poz[i]=l[k-1];
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;
}