|
Колокол
(Время: 0,4 сек. Память: 16 Мб Сложность: 28%)
Очевидно, что для формирования необходимой последовательности следует отсортировать элементы массива по неубыванию. Сразу заметим, что квадратичный алгоритм сортировки не позволит решить задачу полностью в силу установленных ограничений (n <= 30000), поэтому следует использовать более эффективный алгоритм с порядком сложности не менее, чем O(n*ln(n)) .
Первая половина искомой последовательности представляет собой элементы отсортированного массива, имеющие нечетные номера, располагать их следует в том же порядке, что и в отсортированном массиве. Вторая часть последовательности состоит из элементов с четными номерами, которые следует записывать в обратном порядке. Элемент, который следует вывести в i-й позиции искомой последовательности, будет иметь в отсортированном массиве номер 2*i-1 в случае, когда осуществляется вывод первой половины последовательности, во второй части он будет иметь номер 2*(n-i-1). Условие принадлежности элемента к перовой части имеет вид: 2*i <= n+1.
Алгоритмическая реализация:
read(n)
for i=1..n read(a[i])
sort(1,n)
for i=1..n
if(2*i <= n+1) write(a[2*i-1],' ')
else write(a[2*(n-i+1)],' ')
| |