#include <iostream>
#include <vector>
using namespace std;
int binarySearch(vector<int> &a, int k, bool strict = false){
// if strict is false, returns first index of a, greater than or equal to k
// if strict is true, returns first index of a, strctly greater than k
int l = 0;
int r = a.size();
int m = (l+r)/2;
while(l<r){
if(strict?a[m]<=k:a[m]<k) l = m+1;
else r = m;
m = (l+r)/2;
}
return m;
}
int main() {
vector<int> a = {1,1,3,3,3,3,4,4,4,5,5};
cout<<"Size of array is "<<binarySearch(a,6)<<endl;
cout<<"Count of 3 in array is "<<binarySearch(a,3,true)-binarySearch(a,3)<<endl;
cout<<"Index of first 4 is "<<binarySearch(a,4,false)<<endl;
cout<<"Index of last 4 is "<<binarySearch(a,4,true)-1<<endl;
cout<<"Count of 2 in array is "<<binarySearch(a,2,true)-binarySearch(a,2)<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGJpbmFyeVNlYXJjaCh2ZWN0b3I8aW50PiAmYSwgaW50IGssIGJvb2wgc3RyaWN0ID0gZmFsc2UpewoJLy8gaWYgc3RyaWN0IGlzIGZhbHNlLCByZXR1cm5zIGZpcnN0IGluZGV4IG9mIGEsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBrCgkvLyBpZiBzdHJpY3QgaXMgdHJ1ZSwgcmV0dXJucyBmaXJzdCBpbmRleCBvZiBhLCBzdHJjdGx5IGdyZWF0ZXIgdGhhbiBrCglpbnQgbCA9IDA7CglpbnQgciA9IGEuc2l6ZSgpOwoJaW50IG0gPSAobCtyKS8yOwoJd2hpbGUobDxyKXsKCQlpZihzdHJpY3Q/YVttXTw9azphW21dPGspCWwgPSBtKzE7CgkJZWxzZQlyID0gbTsKCQltID0gKGwrcikvMjsKCX0KCXJldHVybiBtOwp9CgppbnQgbWFpbigpIHsKCXZlY3RvcjxpbnQ+IGEgPSB7MSwxLDMsMywzLDMsNCw0LDQsNSw1fTsKCWNvdXQ8PCJTaXplIG9mIGFycmF5IGlzICI8PGJpbmFyeVNlYXJjaChhLDYpPDxlbmRsOwoJY291dDw8IkNvdW50IG9mIDMgaW4gYXJyYXkgaXMgIjw8YmluYXJ5U2VhcmNoKGEsMyx0cnVlKS1iaW5hcnlTZWFyY2goYSwzKTw8ZW5kbDsKCWNvdXQ8PCJJbmRleCBvZiBmaXJzdCA0IGlzICI8PGJpbmFyeVNlYXJjaChhLDQsZmFsc2UpPDxlbmRsOwoJY291dDw8IkluZGV4IG9mIGxhc3QgNCBpcyAiPDxiaW5hcnlTZWFyY2goYSw0LHRydWUpLTE8PGVuZGw7Cgljb3V0PDwiQ291bnQgb2YgMiBpbiBhcnJheSBpcyAiPDxiaW5hcnlTZWFyY2goYSwyLHRydWUpLWJpbmFyeVNlYXJjaChhLDIpPDxlbmRsOwoJcmV0dXJuIDA7Cn0=