#include <stdio.h>
#include <stdlib.h>
// Function to find length of LIS
int longest_increasing_subsequence(int arr[], int n) {
if (n == 0) return 0;
int *lis = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
lis[i] = 1; // Initialize LIS length for each element
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (arr[i] > arr[j] && lis[i] < lis[j] + 1) {
lis[i] = lis[j] + 1; // Update LIS length if current element extends LIS
}
}
}
int max_lis = 0;
for (int i = 0; i < n; i++) {
if (lis[i] > max_lis) {
max_lis = lis[i]; // Find maximum LIS length
}
}
free(lis);
return max_lis;
}
int main() {
int arr[] = {10, 22, 9, 33, 21, 50, 41, 60};
int n = sizeof(arr) / sizeof(arr[0]);
int result = longest_increasing_subsequence(arr, n);
printf("Longest Increasing Subsequence length = %d\n", result);
return 0;
}lis[i] = 1; // Initialize LIS length for each element
Set each element's LIS length to 1 as base case
if (arr[i] > arr[j] && lis[i] < lis[j] + 1) {
Check if current element can extend LIS ending at j
lis[i] = lis[j] + 1; // Update LIS length if current element extends LIS
Update LIS length for i if longer subsequence found
Track maximum LIS length found so far
Longest Increasing Subsequence length = 5