int block_search(const int a[], const IndexBlock idx[], int block_count, int key) {
int block = lower_bound_block(idx, block_count, key);
if (block == block_count) return -1;
for (int i = idx[block].start; i <= idx[block].end; ++i) {
if (a[i] == key) return i;
}
return -1;
}