Pagini recente » Cod sursa (job #484453) | Cod sursa (job #802686) | Cod sursa (job #843058) | Cod sursa (job #1917771) | Cod sursa (job #1786997)
#include <cstdio>
#define MAX_N 100000
using namespace std;
int a[MAX_N+5], sol[MAX_N+5], poz[MAX_N+5];
int main(){
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, i, nr, lmax, pmax, mij, st, dr, p;
scanf("%d", &n);
for (i=1; i<=n; i++)
scanf("%d", &a[i]);
sol[1]=a[1];
poz[1]=1;
nr=1;
lmax=1;
pmax=1;
for (i=2; i<=n; i++){
st=1; dr=nr; p=-1;
while (st<=dr){
mij=(st+dr)/2;
if (a[i]<=sol[mij]){
p=mij;
dr=mij-1;
}else
st=mij+1;
}
if (p==-1){
sol[++nr]=a[i];
poz[i]=nr;
if (nr>lmax){
lmax=nr;
pmax=i;
}
}else{
sol[p]=a[i];
poz[i]=p;
}
}
p=lmax;
for (i=pmax; i>=1 && p>0; i--){
if (poz[i]==p){
sol[p]=a[i];
p--;
}
}
printf("%d\n", lmax);
for (i=1; i<=lmax; i++)
printf("%d ", sol[i]);
return 0;
}