#include <iostream>
#include <vector>
#include <map>
struct Range {
std::size_t start;
std::size_t last;
};
int duration(const Range& range)
{
return range.last - range.start;
}
bool operator < (const Range& lhs, const Range& rhs)
{
return duration(lhs) < duration(rhs);
}
std::map<int, Range>
compute_profits(const std::vector<int>& shares){
std::map<int, Range> res;
for (std::size_t i = 0; i != shares.size(); ++i) {
for (std::size_t j = i + 1; j != shares.size(); ++j) {
const auto benefit = shares[j] - shares[i];
const Range range{i, j};
auto p = res.emplace(benefit, range);
if (!p.second) {
// Already exist, use the better one
auto it = p.first;
it->second = std::min(it->second, range);
}
}
}
return res;
}
void show_result(const std::vector<int>& shares,
const std::vector<int>& benefits)
{
auto profits = compute_profits(shares);
for (const auto b : benefits) {
auto it = profits.find(b);
if (it == profits.end()) {
std::cout << -1 << std::endl;
} else {
const auto& range = it->second;
std::cout << 1 + range.start << " " << 1 + range.last << std::endl;
}
}
}
int main()
{
show_result({ 1, 2, 3, 5}, {3, 8});
std::cout << "--\n";
show_result({ 1, 2, 3, 5}, {2});
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgoKc3RydWN0IFJhbmdlIHsKICAgIHN0ZDo6c2l6ZV90IHN0YXJ0OwogICAgc3RkOjpzaXplX3QgbGFzdDsKfTsKCmludCBkdXJhdGlvbihjb25zdCBSYW5nZSYgcmFuZ2UpCnsKICAgIHJldHVybiByYW5nZS5sYXN0IC0gcmFuZ2Uuc3RhcnQ7ICAgIAp9Cgpib29sIG9wZXJhdG9yIDwgKGNvbnN0IFJhbmdlJiBsaHMsIGNvbnN0IFJhbmdlJiByaHMpCnsKICAgIHJldHVybiBkdXJhdGlvbihsaHMpIDwgZHVyYXRpb24ocmhzKTsKfQoKc3RkOjptYXA8aW50LCBSYW5nZT4KY29tcHV0ZV9wcm9maXRzKGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIHNoYXJlcyl7CiAgICBzdGQ6Om1hcDxpbnQsIFJhbmdlPiByZXM7CiAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICE9IHNoYXJlcy5zaXplKCk7ICsraSkgewogICAgICAgIGZvciAoc3RkOjpzaXplX3QgaiA9IGkgKyAxOyBqICE9IHNoYXJlcy5zaXplKCk7ICsraikgewogICAgICAgICAgICBjb25zdCBhdXRvIGJlbmVmaXQgPSBzaGFyZXNbal0gLSBzaGFyZXNbaV07CiAgICAgICAgICAgIGNvbnN0IFJhbmdlIHJhbmdle2ksIGp9OwogICAgICAgICAgICBhdXRvIHAgPSByZXMuZW1wbGFjZShiZW5lZml0LCByYW5nZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIXAuc2Vjb25kKSB7CiAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGV4aXN0LCB1c2UgdGhlIGJldHRlciBvbmUKICAgICAgICAgICAgICAgIGF1dG8gaXQgPSBwLmZpcnN0OwogICAgICAgICAgICAgICAgaXQtPnNlY29uZCA9IHN0ZDo6bWluKGl0LT5zZWNvbmQsIHJhbmdlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXM7Cn0KCnZvaWQgc2hvd19yZXN1bHQoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgc2hhcmVzLAoJCQkgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIGJlbmVmaXRzKQp7CiAgICBhdXRvIHByb2ZpdHMgPSBjb21wdXRlX3Byb2ZpdHMoc2hhcmVzKTsKICAgCiAgICBmb3IgKGNvbnN0IGF1dG8gYiA6IGJlbmVmaXRzKSB7CiAgICAgICAgYXV0byBpdCA9IHByb2ZpdHMuZmluZChiKTsKICAgICAgICAKICAgICAgICBpZiAoaXQgPT0gcHJvZml0cy5lbmQoKSkgewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgLTEgPDwgc3RkOjplbmRsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJhbmdlID0gaXQtPnNlY29uZDsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IDEgKyByYW5nZS5zdGFydCA8PCAiICIgPDwgMSArIHJhbmdlLmxhc3QgPDwgc3RkOjplbmRsOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKQp7CglzaG93X3Jlc3VsdCh7IDEsIDIsIDMsIDV9LCB7MywgOH0pOwoJc3RkOjpjb3V0IDw8ICItLVxuIjsKCXNob3dfcmVzdWx0KHsgMSwgMiwgMywgNX0sIHsyfSk7Cgp9