#include <iostream>
#include <vector>
#include <unordered_map>
std::pair<int, int> find_range_with_sum(std::vector<int> const& numbers, int k) {
std::unordered_map<int, int> sum_map;
sum_map.emplace(0, 0);
int sum = 0;
for (int i = 0; i < numbers.size(); i++) {
sum += numbers[i];
auto it = sum_map.find(sum - k);
if (it != sum_map.end()) {
return std::make_pair(it->second, i);
}
sum_map.emplace(sum, i+1);
}
return std::make_pair(-1, -1);
}
int main() {
std::vector<int> numbers = {-1, 5, -3, 5, 1, 2, -4, 6, -2};
auto range = find_range_with_sum(numbers, 1);
//output
std::cout << range.first+1 << ". to " << range.second+1 << "." << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KCnN0ZDo6cGFpcjxpbnQsIGludD4gZmluZF9yYW5nZV93aXRoX3N1bShzdGQ6OnZlY3RvcjxpbnQ+IGNvbnN0JiBudW1iZXJzLCBpbnQgaykgewoJc3RkOjp1bm9yZGVyZWRfbWFwPGludCwgaW50PiBzdW1fbWFwOwoJc3VtX21hcC5lbXBsYWNlKDAsIDApOwoJaW50IHN1bSA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG51bWJlcnMuc2l6ZSgpOyBpKyspIHsKCQlzdW0gKz0gbnVtYmVyc1tpXTsKCQlhdXRvIGl0ID0gc3VtX21hcC5maW5kKHN1bSAtIGspOwoJCWlmIChpdCAhPSBzdW1fbWFwLmVuZCgpKSB7CgkJCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdC0+c2Vjb25kLCBpKTsKCQl9CgkJc3VtX21hcC5lbXBsYWNlKHN1bSwgaSsxKTsKCX0KCXJldHVybiBzdGQ6Om1ha2VfcGFpcigtMSwgLTEpOwp9CgppbnQgbWFpbigpIHsKCXN0ZDo6dmVjdG9yPGludD4gbnVtYmVycyA9IHstMSwgNSwgLTMsIDUsIDEsIDIsIC00LCA2LCAtMn07CglhdXRvIHJhbmdlID0gZmluZF9yYW5nZV93aXRoX3N1bShudW1iZXJzLCAxKTsKCQoJLy9vdXRwdXQKCXN0ZDo6Y291dCA8PCByYW5nZS5maXJzdCsxIDw8ICIuIHRvICIgPDwgcmFuZ2Uuc2Vjb25kKzEgPDwgIi4iIDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9