#include <algorithm>
#include <iostream>
using namespace std;
#define IDEONE_BROKEN_CXX11_SUPPORT
#ifdef IDEONE_BROKEN_CXX11_SUPPORT
template <typename T, size_t N> T* begin(T(&arr)[N]) { return arr; }
template <typename T, size_t N> T* end (T(&arr)[N]) { return arr+N; }
#endif
unsigned char data[/*70*1000*1000*/] = {0,2,1,1,0,2,1,4,2,/*...*/};
unsigned int offsets[/*10*1000*1000*/] = {0,1,2,4,6,7,8,/*...*/};
void do_something_for_data_index(unsigned int data_index)
{
cout << "visited: " << (int) data[data_index] << " (at index " << data_index << ")\n";
}
void foo(size_t first_data_index, size_t high_data_index)
{
const auto low = lower_bound(begin(offsets), end(offsets), first_data_index);
const auto high = upper_bound(low , end(offsets), high_data_index);
for(auto offset_it = low; offset_it != high; ++offset_it)
{
do_something_for_data_index(*offset_it);
}
}
int main()
{
foo(1,4);
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgSURFT05FX0JST0tFTl9DWFgxMV9TVVBQT1JUCiNpZmRlZiBJREVPTkVfQlJPS0VOX0NYWDExX1NVUFBPUlQKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPiBUKiBiZWdpbihUKCZhcnIpW05dKSB7IHJldHVybiBhcnI7ICAgfQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+IFQqIGVuZCAgKFQoJmFycilbTl0pIHsgcmV0dXJuIGFycitOOyB9CiNlbmRpZgp1bnNpZ25lZCBjaGFyIGRhdGFbLyo3MCoxMDAwKjEwMDAqL10gICA9IHswLDIsMSwxLDAsMiwxLDQsMiwvKi4uLiovfTsKdW5zaWduZWQgaW50IG9mZnNldHNbLyoxMCoxMDAwKjEwMDAqL10gPSB7MCwxLDIsNCw2LDcsOCwvKi4uLiovfTsKCnZvaWQgZG9fc29tZXRoaW5nX2Zvcl9kYXRhX2luZGV4KHVuc2lnbmVkIGludCBkYXRhX2luZGV4KQp7CiAgICBjb3V0IDw8ICJ2aXNpdGVkOiAiIDw8IChpbnQpIGRhdGFbZGF0YV9pbmRleF0gPDwgIiAoYXQgaW5kZXggIiA8PCBkYXRhX2luZGV4IDw8ICIpXG4iOwp9Cgp2b2lkIGZvbyhzaXplX3QgZmlyc3RfZGF0YV9pbmRleCwgc2l6ZV90IGhpZ2hfZGF0YV9pbmRleCkKewogICAgY29uc3QgYXV0byBsb3cgID0gbG93ZXJfYm91bmQoYmVnaW4ob2Zmc2V0cyksIGVuZChvZmZzZXRzKSwgZmlyc3RfZGF0YV9pbmRleCk7CiAgICBjb25zdCBhdXRvIGhpZ2ggPSB1cHBlcl9ib3VuZChsb3cgICAgICAgICAgICwgZW5kKG9mZnNldHMpLCBoaWdoX2RhdGFfaW5kZXgpOwogICAgZm9yKGF1dG8gb2Zmc2V0X2l0ID0gbG93OyBvZmZzZXRfaXQgIT0gaGlnaDsgKytvZmZzZXRfaXQpCiAgICB7CiAgICAgICAgZG9fc29tZXRoaW5nX2Zvcl9kYXRhX2luZGV4KCpvZmZzZXRfaXQpOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGZvbygxLDQpOwp9Cg==