Cod sursa(job #1539454)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 30 noiembrie 2015 20:08:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

const int MN = 100005;

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

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 idx = 0;

         for (int j = 1 << 17;j;j /= 2)
             if (j + idx <= Sol && A[LIS[j + idx]] < A[i])
                idx += j;

         P[i] = LIS[idx];
         LIS[idx + 1] = i;
         Sol = max(Sol,idx + 1);
     }

     N = LIS[Sol];

     for (int i = Sol;i;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;
}