Pagini recente » Cod sursa (job #2343543) | Cod sursa (job #2137477) | Cod sursa (job #1238485) | Cod sursa (job #1538232) | Cod sursa (job #786063)
Cod sursa(job #786063)
# include <cstdio>
using namespace std;
int L, p, ct1, a[100005], M[100005], Best[100005], prev[100005], rez[100005];
int cautbin(int val, int st, int dr)
{int mij, poz;
while (st <= dr)
{
mij = (st + dr) / 2;
if (a[M[mij]] < val) st = mij + 1, poz = mij;
else dr = mij - 1;
}
return poz;
}
int main()
{int poz = 0, n, i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i = 1; i <= n; i++)
scanf("%d",&a[i]);
M[1] = 1;
Best[1] = 1;
for (i = 2; i <= n; i++)
{
poz = cautbin(a[i],0,L);
Best[i] = poz + 1;
M[poz + 1] = i;
prev[i] = M[poz];
if (L < poz + 1) L = poz + 1, p = i;
}
printf("%d\n",L);
while (p) rez[++ct1] = a[p], p = prev[p];
for (i = ct1; i >= 1; i--)
printf("%d ",rez[i]);
return 0;
}