Задача №414. Эльфы и олени
Разбор добавил Александр Чистяков
В первую очередь отсортируем всех эльфов и оленей по возрастанию строптивости/темперамента. После этого будем искать максимальное количество оленей в упряжке путём бинарного поиска по ответу. Минимальное количество упряжек равно 0. Максимальное - min(m, n/2). Пусть мы хотим определить: можем ли мы сформировать упряжку из K оленей? 1)Среди отсортированных эльфов выберем K наименее темпераментных (1..K) и K наиболее темпераментных ((N-K+1)..N). (очевидно, что брать более "устреднённых" эльфов нет смысла) 2)Среди выбранных эльфов на одного оленя будем сажать тех, разница между индексами которых равна (N-K). То есть: 1 и (N-K+1), 2 и (N-K+2), 3 и (N-K+3)... (очевидно что ни какое другое размещение заведомо не позволит увеличить количество осёдланых оленей) 3)Теперь будем пытаться усадить первую пару эльфов(1 и (N-K+1)) на какого-нибудь оленя. Для этого будем последовательно идти по отсортированному массиву оленей и как только строптивость текущего оленя окажется между темпераментами текущей пары эльфов, сажаем их на этого оленя. (темпераменты эльфов во всех других парах выше темпераментов эльфов в текущей паре, поэтому текущую пару следует сажать на самого спокойного оленя). После усадки текущей пары эльфов следует переходить к следующей и так далее... 4)Функция, отвечающая на возможность данного запроса бинпоиска, должна выдывать положительный ответ в случае, если к концу просмотра массива с оленями всех указанных в пункте 1 эльфов удалось усадить. Чтобы вывести ответ,необходимо повторить процеду рассадки оптимально найденного количества эльфов и выводить состав сформированной упряжки. В результате алгоритм состоит из 3 этапов: 1)Сортировка O(n*log n + m*log m); 2)Бинарный поиск O(log(min(m,n/2)) * m); 3)Восстановление ответа O(m);
Даны эльфы, обладающие темпераментом Bi и олени со строптивостью Ai. С каждым оленем должны ехать два эльфа, причем Bk < Ai < Bj. Необходим выбрать наибольшее количество оленей.
Сдать: для сдачи задач необходимо войти в систему
3334
statement