#include #include std::vector maximumBeauty(std::vector>& items, std::vector& queries) { std::sort(items.begin(), items.end()); std::vector> sorted_queries; sorted_queries.reserve(queries.size()); // couple queries with their indices for (size_t i = 0; i < queries.size(); ++i) { sorted_queries.emplace_back(queries[i], i); } std::sort(sorted_queries.begin(), sorted_queries.end()); int beauty = items[0][1]; size_t i = 0; std::vector ans(queries.size()); for (const auto [query, index] : sorted_queries) { while (i < items.size() && items[i][0] <= query) { beauty = std::max(beauty, items[i][1]); ++i; } // invariant: items[i - 1] is the rightmost considerable item ans[index] = i > 0 && items[i - 1][0] <= query ? beauty : 0; } return std::move(ans); }