int binary_search(const unsigned *a, int n, unsigned x)
{
static int lastid = 0;
static int last = a[0];
int l = -1, r = n;
if (last > x)
{
r = lastid;
}
else if (last < x)
{
l = lastid;
}
else
{
return lastid;
}
while (l + 1 < r)
{
int mid = (l + r) / 2;
if (a[mid] < x)
{
l = mid;
}
else
{
r = mid;
}
}
return l + 1;
}