#include <stdio.h>
#include <stdlib.h>
struct Interval {
int start;
int end;
};
int compareIntervals(const void *a, const void *b) {
return ((struct Interval*)a)->end - ((struct Interval*)b)->end;
}
void intervalCovering(struct Interval intervals[], int n) {
qsort(intervals, n, sizeof(struct Interval), compareIntervals);
struct Interval result[n];
int resultCount = 0;
int i = 0;
while (i < n) {
result[resultCount] = intervals[i];
resultCount++;
while (i < n - 1 && intervals[i + 1].start <= result[resultCount - 1].end) {
i++;
}
i++;
}
printf("Minimum number of intervals needed: %d\n", resultCount);
printf("Selected intervals: ");
for (int j = 0; j < resultCount; j++) {
printf("[%d, %d] ", result[j].start, result[j].end);
}
printf("\n");
}
int main() {
struct Interval intervals[] = {{1, 3}, {2, 4}, {3, 5}, {5, 6}};
int n = sizeof(intervals) / sizeof(intervals[0]);
intervalCovering(intervals, n);
return 0;
}