#pragma once // Step 1481: bisect candidate selector. #include #include #include struct BisectCandidate { std::string proposalId; int index = 0; }; class BisectCandidateSelector { public: static std::vector ordered(const std::vector& proposalIds) { std::vector out; for (size_t i = 0; i < proposalIds.size(); ++i) out.push_back({proposalIds[i], static_cast(i)}); std::sort(out.begin(), out.end(), [](const auto& a, const auto& b){ return a.proposalId < b.proposalId; }); return out; } static BisectCandidate midpoint(const std::vector& orderedCandidates) { if (orderedCandidates.empty()) return {"", -1}; return orderedCandidates[orderedCandidates.size() / 2]; } };