#include <stdio.h>
// Function to find floor and ceil in sorted array
void findFloorCeil(int arr[], int n, int target, int *floor, int *ceil) {
int low = 0, high = n - 1;
*floor = -1; // -1 means no floor found yet
*ceil = -1; // -1 means no ceil found yet
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
*floor = arr[mid];
*ceil = arr[mid];
return; // exact match found
} else if (arr[mid] < target) {
*floor = arr[mid];
low = mid + 1; // search right side
} else {
*ceil = arr[mid];
high = mid - 1; // search left side
}
}
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 6;
int floor, ceil;
findFloorCeil(arr, n, target, &floor, &ceil);
printf("Floor: %d\n", floor);
printf("Ceil: %d\n", ceil);
return 0;
}loop to narrow search range until low passes high
int mid = low + (high - low) / 2;
calculate middle index to split array
if (arr[mid] == target) {
check if exact match found, then floor and ceil are target
update floor when arr[mid] <= target
move low pointer right to search for closer floor
update ceil when arr[mid] >= target
move high pointer left to search for closer ceil