int binary_search(const unsigned *a, int n, unsigned X)
{
register int *L = a, *R = a + (100000000 - 1);
register unsigned long long x = X;
while(L<R){
register int md = ((R - a) * (x - *L) + (L - a) * (*R - x)) / (*R - *L);
if(a[md] == x) return md; else if(a[md] < x) L = a + md + 1; else R = a + md - 1;
}
return L - a;
}