Pagini recente » Cod sursa (job #2777043) | Cod sursa (job #1016463) | Cod sursa (job #3001876) | Cod sursa (job #375799) | Cod sursa (job #1097895)
/* Subsir crescator maximal folosind cautare binara + o coada */
#include <stdio.h>
#define MAX 100001
int N, V[MAX], Bst[MAX], C[MAX], K = 0;
int CautBin(int X)
{
int Left = 1, Right = K + 1, Middle;
while (Right - Left > 1)
{
Middle = (Left + Right) / 2;
if (C[Middle] <= X) Left = Middle; else Right = Middle;
}
if (C[Left] < X) Left = Right;
if (Left > K) K = Left;
C[Left] = X;
return Left;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d", &N);
for (int i = 1; i <= N; i++)
{
scanf("%d", &V[i]);
Bst[i] = CautBin(V[i]);
}
printf("%d\n", K);
for (int i = N, j = K; i > 0; i--)
{
if (Bst[i] == j)
{
C[j--] = V[i];
}
}
for (int i = 1; i <= K; i++) printf("%d ", C[i]);
}