int lis( int arr[], int n )
{
int *lis, i, j, max = 0;
lis = (int*) malloc ( sizeof( int ) * n );
for ( i = 0; i < n; i++ )
lis[i] = 1;
/* Compute optimized LIS values in bottom up manner */
for ( i = 1; i < n; i++ )
for ( j = 0; j < i; j++ )
if ( arr[i] > arr[j] && lis[i] < lis[j] + 1)
lis[i] = lis[j] + 1;
// To get Max element in lis[]
for ( i = 0; i < n; i++ )
if ( max < lis[i] )
max = lis[i];
free( lis );
return max;
}
Test case
{ 10, 22, 9, 33}
i=1 j=0
lis[1] = 2
i=2 j=0 i=2 j=1
no change
i=3 j=0 i=3 j=1 i=3 j=2
lis[3] =2 lis[3] =3
max = 3