Pagini recente » Cod sursa (job #105686) | Cod sursa (job #2979135) | Cod sursa (job #702639) | Cod sursa (job #1101264) | Cod sursa (job #2503168)
#include <cstdio>
using namespace std;
int n, a[100005], el[100005], pozitii[100005], nrEl, poz;
int dp[100005], imax;
int caut_bin(int x, int lg)
{
int i;
for(i=nrEl; lg!=0; lg>>=1)
if(i - lg >= 0 && el[i-lg] >= x)
i-=lg;
return i;
}
int lg=1;
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i=1; i<=n; i++)
{
scanf("%d", &a[i]);
if(i > lg)
lg*=2;
poz=caut_bin(a[i], lg);
el[poz]=a[i];
if(poz == nrEl)
nrEl++;
pozitii[i]=poz;
if(pozitii[i]>pozitii[imax])
imax=i;
}
printf("%d\n", pozitii[imax]+1);
int ant=pozitii[imax], aux=nrEl-1;
dp[aux--]=a[imax];
for(int i=imax; i>=0 && aux>=0; i--)
if(pozitii[i] == ant)
{
dp[ant]=a[i];
ant--;
}
for(int i=0; i<=pozitii[imax]; i++)
printf("%d ", dp[i]);
return 0;
}