#include <bits/stdc++.h>
using
namespace
std;
int
n = 8;
int
a[] = { 2, 3, 3, 5, 5, 5, 6, 6 };
bool
contains(
int
low,
int
high,
int
key)
{
bool
ans =
false
;
while
(low <= high) {
int
mid = low + (high - low) / 2;
int
midVal = a[mid];
if
(midVal < key) {
low = mid + 1;
}
else
if
(midVal > key) {
high = mid - 1;
}
else
if
(midVal == key) {
ans =
true
;
break
;
}
}
return
ans;
}
int
first(
int
low,
int
high,
int
key)
{
int
ans = -1;
while
(low <= high) {
int
mid = low + (high - low + 1) / 2;
int
midVal = a[mid];
if
(midVal < key) {
low = mid + 1;
}
else
if
(midVal > key) {
high = mid - 1;
}
else
if
(midVal == key) {
ans = mid;
high = mid - 1;
}
}
return
ans;
}
int
last(
int
low,
int
high,
int
key)
{
int
ans = -1;
while
(low <= high) {
int
mid = low + (high - low + 1) / 2;
int
midVal = a[mid];
if
(midVal < key) {
low = mid + 1;
}
else
if
(midVal > key) {
high = mid - 1;
}
else
if
(midVal == key) {
ans = mid;
low = mid + 1;
}
}
return
ans;
}
int
leastgreater(
int
low,
int
high,
int
key)
{
int
ans = -1;
while
(low <= high) {
int
mid = low + (high - low + 1) / 2;
int
midVal = a[mid];
if
(midVal < key) {
low = mid + 1;
}
else
if
(midVal > key) {
ans = mid;
high = mid - 1;
}
else
if
(midVal == key) {
low = mid + 1;
}
}
return
ans;
}
int
greatestlesser(
int
low,
int
high,
int
key)
{
int
ans = -1;
while
(low <= high) {
int
mid = low + (high - low + 1) / 2;
int
midVal = a[mid];
if
(midVal < key) {
ans = mid;
low = mid + 1;
}
else
if
(midVal > key) {
high = mid - 1;
}
else
if
(midVal == key) {
high = mid - 1;
}
}
return
ans;
}
int
main()
{
printf
(
"Contains\n"
);
for
(
int
i = 0; i < 10; i++)
printf
(
"%d %d\n"
, i, contains(0, n - 1, i));
printf
(
"First occurrence of key\n"
);
for
(
int
i = 0; i < 10; i++)
printf
(
"%d %d\n"
, i, first(0, n - 1, i));
printf
(
"Last occurrence of key\n"
);
for
(
int
i = 0; i < 10; i++)
printf
(
"%d %d\n"
, i, last(0, n - 1, i));
printf
(
"Least integer greater than key\n"
);
for
(
int
i = 0; i < 10; i++)
printf
(
"%d %d\n"
, i, leastgreater(0, n - 1, i));
printf
(
"Greatest integer lesser than key\n"
);
for
(
int
i = 0; i < 10; i++)
printf
(
"%d %d\n"
, i, greatestlesser(0, n - 1, i));
return
0;
}