/*
 * C Program to Find Ceiling & Floor of  X given a Sorted Array & a value X
 */
#include <stdio.h>

/* Function to get index of ceiling of x in arr[low..high] */
int ceilSearch(int arr[], int low, int high, int x)
{
    int i;
    /* If x is smaller than or equal to first element,then return the first element */
    if (x <= arr[low])
        return low;
    /* Otherwise, linearly search for ceil value */
    for (i = low; i < high; i++)
        {
            if (arr[i] == x)
                return i;
            /* if x lies between arr[i] and arr[i+1] including arr[i+1], then return arr[i+1] */
            if (arr[i] < x && arr[i + 1] >= x)
                return i + 1;
        }
    /* If we reach here then x is greater than the last element of the array,  return -1 in this case */
    return -1;
}

int main()
{
    int arr[] = {1, 2, 8, 10, 10, 12, 19};
    int n = sizeof(arr)/sizeof(arr[0]);
    int x = 3;
    int index = ceilSearch(arr, 0, n-1, x);
    if (index == -1)
        printf("Ceiling of %d doesn't exist in array ", x);
    else
        printf("ceiling of %d is %d", x, arr[index]);
    getchar();
    return 0;
}

/*

ceiling of 3 is 8