#include <bits/stdc++.h>
using namespace std;
int countBinarySearchableIndex(int Arr[], int l, int r,
int LR, int RL)
{
// Invalid indexes
if (l > r)
return 0;
int ans = 0;
// Finding the middle element of the current array
// (arr[l], ... arr[r]) Similar to as we do in binary
// search
int m = (l + r) / 2;
// If these conditions follow that means Arr[m] is
// binary searchable.
if (LR < Arr[m] && Arr[m] < RL)
ans = 1;
// Finding the binary searchable elements to the left of
// middle(m) element
int l_ans = countBinarySearchableIndex(
Arr, l, m - 1, LR, min(RL, Arr[m]));
// Finding the binary searchable elements to the right
// of middle(m) element
int r_ans = countBinarySearchableIndex(
Arr, m + 1, r, max(LR, Arr[m]), RL);
return ans + l_ans + r_ans;
}
int main()
{
int Arr[] = { 10, 1, 2, 3, 4, 8, 6, 5,
7, 12, 9, 8, 13, 15, 11 };
int n = 15;
cout << "Number of Binary Searchable Indexes: ";
cout << countBinarySearchableIndex(Arr, 0, n - 1, -1e9,
1e9)
<< endl;
return 0;
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAoKaW50IGNvdW50QmluYXJ5U2VhcmNoYWJsZUluZGV4KGludCBBcnJbXSwgaW50IGwsIGludCByLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBMUiwgaW50IFJMKQp7CgogICAgLy8gSW52YWxpZCBpbmRleGVzCgogICAgaWYgKGwgPiByKQoKICAgICAgICByZXR1cm4gMDsKCiAgICBpbnQgYW5zID0gMDsKIAoKICAgIC8vIEZpbmRpbmcgdGhlIG1pZGRsZSBlbGVtZW50IG9mIHRoZSBjdXJyZW50IGFycmF5CgogICAgLy8gKGFycltsXSwgLi4uIGFycltyXSkgU2ltaWxhciB0byBhcyB3ZSBkbyBpbiBiaW5hcnkKCiAgICAvLyBzZWFyY2gKCiAgICBpbnQgbSA9IChsICsgcikgLyAyOwogCgogICAgLy8gSWYgdGhlc2UgY29uZGl0aW9ucyBmb2xsb3cgdGhhdCBtZWFucyBBcnJbbV0gaXMKCiAgICAvLyBiaW5hcnkgc2VhcmNoYWJsZS4KCiAgICBpZiAoTFIgPCBBcnJbbV0gJiYgQXJyW21dIDwgUkwpCgogICAgICAgIGFucyA9IDE7CiAKCiAgICAvLyBGaW5kaW5nIHRoZSBiaW5hcnkgc2VhcmNoYWJsZSBlbGVtZW50cyB0byB0aGUgbGVmdCBvZgoKICAgIC8vIG1pZGRsZShtKSBlbGVtZW50CgogICAgaW50IGxfYW5zID0gY291bnRCaW5hcnlTZWFyY2hhYmxlSW5kZXgoCgogICAgICAgIEFyciwgbCwgbSAtIDEsIExSLCBtaW4oUkwsIEFyclttXSkpOwogCgogICAgLy8gRmluZGluZyB0aGUgYmluYXJ5IHNlYXJjaGFibGUgZWxlbWVudHMgdG8gdGhlIHJpZ2h0CgogICAgLy8gb2YgbWlkZGxlKG0pIGVsZW1lbnQKCiAgICBpbnQgcl9hbnMgPSBjb3VudEJpbmFyeVNlYXJjaGFibGVJbmRleCgKCiAgICAgICAgQXJyLCBtICsgMSwgciwgbWF4KExSLCBBcnJbbV0pLCBSTCk7CiAKCiAgICByZXR1cm4gYW5zICsgbF9hbnMgKyByX2FuczsKfQogCgppbnQgbWFpbigpCnsKCiAgICBpbnQgQXJyW10gPSB7IDEwLCAxLCAgMiwgMywgNCwgIDgsICA2LCA1LAoKICAgICAgICAgICAgICAgICAgNywgIDEyLCA5LCA4LCAxMywgMTUsIDExIH07CgogICAgaW50IG4gPSAxNTsKCiAgICBjb3V0IDw8ICJOdW1iZXIgb2YgQmluYXJ5IFNlYXJjaGFibGUgSW5kZXhlczogIjsKCiAgICBjb3V0IDw8IGNvdW50QmluYXJ5U2VhcmNoYWJsZUluZGV4KEFyciwgMCwgbiAtIDEsIC0xZTksCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxZTkpCgogICAgICAgICA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9