int binary_search(const unsigned *a, int n, unsigned x)
{
int l = 0, r = n - 1, res = n - 1;
while(l<=r)
{
int mid = (l + r) >> 1;
if(a[mid] > x) r = mid - 1;
else l = mid + 1, res = mid;
}
for(int i = 0; i < n; i++)
if(a[i] == x)
return i;
return res;
}