1 Отредактировано rteuxdgd (2021-12-03 17:40:57)

Тема: Помогите решить задачу

Сложение
Элли решила научить Страшилу Мудрого суммировать числа. Для этого она дала ему два массива натуральных чисел, в первом массиве N чисел, во втором M. Старшила должен сложить каждое число из первого массива с каждым числом из второго массива и выписать все получившиеся суммы в порядке неубывания. После этого Элли проверит, как Страшила выполнил задание. Элли сама не очень сильна в математике, поэтому она просит вас определить значение, которое будет находится в упорядоченном списке сумм на K-ом месте. Суммы в списке нумеруются, начиная с 1.

Формат входных данных
В первой строке входных данных записано единственное натуральное число N (1 ≤ N ≤ 2·10^5) - количество чисел в первом массиве.
Во второй строке входных данных записаны через пробел N натуральных чисел, каждое из которых не превышает 10^9 - элементы первого массива.
В третьей строке входных данных записано единственное натуральное число M (1 ≤ M ≤ 2·10^5) - количество чисел во втором массиве.
В четвертой строке входных данных записаны через пробел M натуральных чисел, каждое из которых не превышает 10^9 - элементы второго массива.
В пятой строке записано единственное натуральное число K (1 ≤ K ≤ N·M)

Формат результата
Выведите единственное число - значение, которое будет стоять на К-ом месте в отсортированном списке сумм, полученных Страшилой.

Примеры
Входные данные

3
3 1 5
4
4 3 1 1
5

Результат работы

4

Входные данные

3
20 10 30
2
50 40
6

Результат работы

80

Ограничение времени:    1 с
Ограничение памяти:    512M

2

Re: Помогите решить задачу

Можете ли вы привести ссылку на проблемсет, откуда взята эта задача, чтобы исключить возможность, что мы случайно вмешаемся в ход какого-нибудь соревнования?

3

Re: Помогите решить задачу

Конечно, задача взята отсюда http://ejudge.cfuv.ru/2021/munic/problems2.pdf этап соревнований уже прошел пару недель назад

4

Re: Помогите решить задачу

Спасибо.

Вероятно, эту задачу можно решить двоичным поиском? Будем подбирать ответ двоичным поиском. Для этого нам надо по заданному числу находить его позицию в списке сумм, потому что, зная это, мы можем определить, слишком большая ли середина поискового интервала или слишком маленькая (об этом нам скажет сравнение с K), и на основе этого перейти к поиску в левой или правой половине поискового интервала.

Для вычисления позиции числа X в списке сумм можно просто пройтись по всем элементам первого массива и для каждого из них - обозначим его через A\[i\] - с помощью двоичного поиска по второму массиву определить, сколько есть элементов, меньших X-A\[i\]. Сумма этих количеств даст нам искомую позицию X.

Итоговая асимптотика будет N log M log A, где A - величина чисел. Наверняка есть и более быстрые решения - как минимум, от вложенного двоичного поиска можно избавиться методом двух указателей. Но два бин. поиска, кажется, реализовать быстрее всего.

5

Re: Помогите решить задачу

Спасибо большое!