// Write a Program to take a sorted array arr[] and an integer x as input, find the index (0-based) of the smallest element in arr[] that is greater than or equal to x and print it. This element is called the ceil of x. If such an element does not exist, print -1. Note: In case of multiple occurrences of ceil of x, return the index of the first occurrence.
#include <stdio.h>
int main( ) {
int n, x;
int arr[ n] ;
for ( int i
= 0 ; i
< n
; i
++ ) scanf ( "%d" , & arr
[ i
] ) ;
int low = 0 , high = n - 1 , ans = - 1 ;
while ( low <= high) {
int mid = ( low + high) / 2 ;
if ( arr[ mid] >= x) {
ans = mid; // possible ceil
high = mid - 1 ; // move left for first occurrence
} else {
low = mid + 1 ;
}
}
return 0 ;
}
Ly8gV3JpdGUgYSBQcm9ncmFtIHRvIHRha2UgYSBzb3J0ZWQgYXJyYXkgYXJyW10gYW5kIGFuIGludGVnZXIgeCBhcyBpbnB1dCwgZmluZCB0aGUgaW5kZXggKDAtYmFzZWQpIG9mIHRoZSBzbWFsbGVzdCBlbGVtZW50IGluIGFycltdIHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHggYW5kIHByaW50IGl0LiBUaGlzIGVsZW1lbnQgaXMgY2FsbGVkIHRoZSBjZWlsIG9mIHguIElmIHN1Y2ggYW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdCwgcHJpbnQgLTEuIE5vdGU6IEluIGNhc2Ugb2YgbXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YgY2VpbCBvZiB4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlLgoKCSNpbmNsdWRlIDxzdGRpby5oPgoKaW50IG1haW4oKSB7CiAgICBpbnQgbiwgeDsKICAgIHNjYW5mKCIlZCIsICZuKTsKCiAgICBpbnQgYXJyW25dOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHNjYW5mKCIlZCIsICZhcnJbaV0pOwoKICAgIHNjYW5mKCIlZCIsICZ4KTsKCiAgICBpbnQgbG93ID0gMCwgaGlnaCA9IG4gLSAxLCBhbnMgPSAtMTsKCiAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHsKICAgICAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKCiAgICAgICAgaWYgKGFyclttaWRdID49IHgpIHsKICAgICAgICAgICAgYW5zID0gbWlkOyAgICAgIC8vIHBvc3NpYmxlIGNlaWwKICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDE7IC8vIG1vdmUgbGVmdCBmb3IgZmlyc3Qgb2NjdXJyZW5jZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ZigiJWQiLCBhbnMpOwogICAgcmV0dXJuIDA7Cn0KCgo=