dmitrii2004, Переменная m используется и для количества запросов (граница цикла по i) и внутри бинпоиска. Она в бинпоиске перетирается и цикл внезапно заканчивается.
versidue, Ну, в стандерте написано, "числа с плавающей точкой, поддерживающие стандарт IEEE". Там не сказано, что он всегда поддерживается. Там даже есть ссылка на метод определения, поддерживается ли этот стандарт и напротив float написано "usually true". Т.е. не всегда.
dmitrii2004, Постарайтесь напистаь сами. Если что-то непонятно - спрашивайте. Первый вариант с деревом отрезков - по-моему, концептуально проще. Код дерева отрезков есть по ссылке. Вам только нужно будет изменить сумму на gcd в паре мест. А дальше один цикл for по левой границе и вложенный цикл while по правой.
Данил Васькевич, Если heap реализована через vector, то просто сделать у него pop_back(). Если вы там бинарное дерево с указателями впендюрили, то тогда, да - delete.
Данил Васькевич, Нет. Первый и последний в массиве кучи. Первый - да - будет с максимальным приоритетом. А последний - как получится, вряд ли с минимальным.
dmitrii2004, Ну нет. писать за вас решение я не буду. За этим на freelance.habr.ru
Что-то непонятно в описании решения? Раскладывать числа на множители вы умеете - у вас это в конце программы уже есть. Только вы там сумму множителей считаете, а надо их в массив складывать и степень в цикле while инкрементировать. Вы максимум в массиве найти не можете? Или цикл по k от 1 до m написать не можете?