Cod sursa(job #1446915)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 3 iunie 2015 10:10:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
const int Max = 100001;

int N,Sol = 0,A[Max],LIS[Max],P[Max],S[Max];

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]);
         int F = 1,L = Sol;

          while (F <= L)
          {
              int Mid = (L + F) / 2;
              if (A[LIS[Mid]] < A[i]) F = Mid + 1;
                                 else L = Mid - 1;
          }
          P[i] = LIS[F-1];
          LIS[F] = i;

          if (F > Sol) Sol = F;
     }
     N = LIS[Sol];
     for (int i = Sol;i > 0;i--)
     {
         S[i] = A[N];
         N = P[N];
     }
     printf("%d\n",Sol);
     for (int i = 1;i <= Sol;i++) printf("%d ",S[i]);

    return 0;
}