Pagini recente » Cod sursa (job #757168) | Cod sursa (job #766385) | Cod sursa (job #2303374) | Cod sursa (job #1918154) | Cod sursa (job #2485865)
#include <cstdio>
using namespace std;
int a[100005];
int v[100005];
int p[100005];
int sol[100005];
int n, lmax;
int cautare_binara(int poz, int x, int l){
int i;
for(l, i=poz;l;l>>=1)
if(i - l >=0 && v[i - l] >= x)
i-=l;
return i;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
int lg=1;
int pozlmax=0;
for(int i=0; i<n; i++){
scanf("%d", &a[i]);
if(i>lg)
lg<<=1;
int poz=cautare_binara(i,a[i],lg);
if(poz>lmax){
lmax=poz;
pozlmax=i;
}
v[poz]=a[i];
p[i]=poz;
v[lmax+1]=10000000;
}
printf("%d\n", lmax+1);
// for(int i=0; i<=lmax; i++)
// printf("%d ", v[i]);
// printf("\n");
// for(int i=0; i<n; i++)
// printf("%d ", p[i]);
//
// printf("\n");
int auxxlmax=lmax;
for(int i=pozlmax; i>=0; i--){
if(p[i]==lmax)
{
sol[lmax]=a[i];
lmax--;
}
}
for(int i=0; i<=auxxlmax; i++)
printf("%d ", sol[i]);
return 0;
}