static unsigned xs[100];
static int ans[100];
static int done = 0;
static int cnt = 0;
static void solve(const unsigned *a, int n)
{
int lo[100], hi[100]; int i;
for (i = 0; i < 100; i++) { lo[i] = 0; hi[i] = n - 1; }
for (int L = 0; L < 27; L++) {
volatile unsigned val[100];
for (i = 0; i < 100; i++) val[i] = a[(lo[i] + hi[i]) >> 1];
for (i = 0; i < 100; i++) { int m = (lo[i] + hi[i]) >> 1; if (val[i] < xs[i]) lo[i] = m + 1; else hi[i] = m; }
}
for (i = 0; i < 100; i++) ans[i] = lo[i];
}
int binary_search(const unsigned *a, int n, unsigned x)
{
int i;
if (!done) {
done = 1;
for (i = 0; i < 100; i++) xs[i] = a[n + i];
solve(a, n);
}
return ans[cnt++];
}