Skip to content

Latest commit

 

History

History

Heaps, sort, binsearch

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Куча, сортировки, двоичный поиск

A. Хип ли?

Имя входного файла: isheap.in

Имя выходного файла: isheap.out

Структуру данных Heap можно реализовать на основе массива.

Для этого должно выполнятся основное свойство Heap’a, которое заключается в следующем.

Для каждого 0 ≤ i < n выполняются следующие условия:

  • Если 2_i_ + 1 < n, то a[i] ≤ a[2_i_ + 1]
  • Если 2_i_ + 2 < n, то a[i] ≤ a[2_i_ + 2]

Дан массив целых чисел. Определите является ли он Heap’ом.

Формат входного файла

Первая строка входного файла содержит целое число n ( 1 ≤ n ≤ 10^5 ). Вторая строка содержит n целых чисел по модулю не превосходящих 2 · 10^9.

Формат выходного файла

Выведите "YES", если массив является Heap’ом и "NO" в противном случае.

Пример

isheap.in

5
1 0 1 2 0

isheap.out

NO

isheap.in

5
1 3 2 5 4

isheap.out

YES

B. Приоритетная очередь

Имя входного файла: priorityqueue.in

Имя выходного файла: priorityqueue.out

Реализуйте приоритетную очередь. Ваша очередь должна поддерживать следующие операции: добавить элемент, извлечь минимальный элемент, уменьшить элемент, добавленный во время одной из операций. Все операции нумеруются по порядку, начиная с 1.

Формат входного файла

Входной файл содержит описание операций со очередью. В очередь помещаются и извлекаются только целые числа, не превышающие по модулю 10^9.

Формат выходного файла

Выведите последовательно результат выполнения всех операций extract-min. Если перед очередной операции extract-min очередь пуста, выведите вместо числа звездочку.

Пример

priorityqueue.in

push 3
push 4
push 2
extract-min
decrease-key 2 1
extract-min
extract-min
extract-min

priorityqueue.out

2
1
3
*

C. Cортировка

Имя входного файла: sort.in

Имя выходного файла: sort.out

Дан массив целых чисел. Ваша задача - отсортировать его в порядке неубывания. Для того, чтобы узнать, какую сортировку вам нужно реализовать, возьмите остаток от деления вашего номера на 3.

  • 0 - Сортировка слиянием.
  • 1 - Сортировка кучей.
  • 2 - Быстрая сортировка.

Формат входного файла

В первой строке входного файла содержится число n ( 1 ≤ n ≤ 100000 ) - количество элементов в массиве. Во второй строке находятся n целых чисел, по модулю не превосходящих 10^9.

Формат выходного файла

В выходной файл надо вывести этот же массив в порядке неубывания, между любыми двумя числами должен стоять ровно один пробел.

Пример

sort.in

10
1 8 2 1 4 7 3 2 3 6

sort.out

1 1 2 2 3 3 4 6 7 8

D. Цифровая сортировка

Имя входного файла: radixsort.in

Имя выходного файла: radixsort.out

Дано n строк, выведите их порядок после k фаз цифровой сортировки.

Формат входного файла

В первой строке входного файла содержится число n - количество строк, m - их длина и k – число фаз цифровой сортировки ( 1 ≤ n ≤ 1000 , 1 ≤ km ≤ 1000 ). В следующих n строках находятся сами строки.

Формат выходного файла

Выведите строки в порядке в котором они будут после k фаз цифровой сортировки.

Пример

radixsort.in

3 3 1
bbb
aba
baa

radixsort.out

aba
baa
bbb

radixsort.in

3 3 2
bbb
aba
baa

radixsort.out

baa
aba
bbb

radixsort.in

3 3 3
bbb
aba
baa

radixsort.out

aba
baa
bbb

E. Анти-QuickSort

Имя входного файла: antiqs.in

Имя выходного файла: antiqs.out

Для сортировки последовательности чисел широко используется быстрая сортировка - Quick Sort. Далее приведена программа, которая сортирует массив a, используя этот алгоритм.

def qsort ( l e f t , right ) :
key = a [ ( l e f t + right ) // 2]
i = l e f t
j = right
while i <= j :
while a [ i ] < key : # f i r s t while
i += 1
while a [ j ] > key : # second while
j −= 1
i f i <= j :
a [ i ] , a [ j ] = a [ j ] , a [ i ]
i += 1
j −= 1
i f l e f t < j :
qsort ( l e f t , j )
i f i < right :
qsort ( i , right )
qsort (0 , n − 1)

Хотя QuickSort является самой быстрой сортировкой в среднем, существуют тесты, на которых она работает очень долго. Оценивать время работы алгоритма будем количеством сравнений с элементами массива (то есть суммарным количеством сравнений в первом и втором while). Требуется написать программу, генерирующую тест, на котором быстрая сортировка сделает наибольшее число таких сравнений.

Формат входного файла

В первой строке находится единственное число n ( 1 ≤ n ≤ 70000 ).

Формат выходного файла

Вывести перестановку чисел от 1 до n, на которой быстрая сортировка выполнит максимальное число сравнений. Если таких перестановок несколько, вывести любую из них.

Пример

antiqs.in

3 

antiqs.out

1 3 2

F. Стильная одежда

Имя входного файла: style.in

Имя выходного файла: style.out

Глеб обожает шоппинг. Как-то раз он загорелся идеей подобрать себе майку и штаны так, чтобы выглядеть в них максимально стильно. В понимании Глеба стильность одежды тем больше, чем меньше разница в цвете элементов его одежды. В наличии имеетсяN ( 1 ≤ N ≤ 100 000) маек и M ( 1 ≤ M ≤ 100 000) штанов, про каждый элемент известен его цвет (целое число от 1 до 10 000 000). Помогите Глебу выбрать одну майку и одни штаны так, чтобы разница в их цвете была как можно меньше.

Формат входного файла

Сначала вводится информация о майках: в первой строке целое число N ( 1 ≤ N ≤100 000) и во второй N целых чисел от 1 до 10 000 000 - цвета имеющихся в наличии маек. Гарантируется, что номера цветов идут в возрастающем порядке (в частности, цвета никаких двух маек не совпадают). Далее в том же формате идёт описание штанов: их количество M ( 1 ≤ M ≤ 100 000) и в следующей строке M целых чисел от 1 до 10 000 000 в возрастающем порядке - цвета штанов.

Формат выходного файла

Выведите пару неотрицательных чисел - цвет майки и цвет штанов, которые следует выбрать Глебу. Если вариантов выбора несколько, выведите любой из них.

Примеры

style.in

2
3 4
3
1 2 3

style.out

3 3

style.in

2
4 5
3
1 2 3

style.out

4 3

G. Стильная одежда 2

Имя входного файла: style.in

Имя выходного файла: style.out

Глеб решил развить успех и купить более сложный комплект: из кепки, майки, штанов и ботинок. В понимании Глеба стильность комплекта тем больше, чем меньше максимальная разница в цвете элементов его одежды. В наличии имеется N1 кепок, N2 маек, N3 штанов и N4 ботинок, про каждый элемент известен его цвет. Помогите Глебу выбрать комплект.

Формат входного файла

Сначала вводится информация о кепках, потом о майках, потом о штанах и в конце о ботинках:. Про каждый тип одежды в первой строке целое число Ni ( 1 ≤ Ni ≤ 100 000) и во второй Ni целых чисел от 1 до 100 000 - цвета имеющихся предметов.

Формат выходного файла

Выведите четыре числа - цвета кепки, майки, штанов и ботинок. Если вариантов выбора несколько, выведите любой из них.

Примеры

style.in

3
1 2 3
2
1 3
2
3 4
2
2 3

style.out

3 3 3 3

style.in

1
5
4
3 6 7 10
4
18 3 9 11
1
20

style.out

5 7 9 20

H. K-ая порядковая статистика

Имя входного файла: kth.in

Имя выходного файла: kth.out

Дан массив изnэлементов. Какое число k-ое в порядке возрастания в этом массиве.

Формат входного файла

В первую строке входного файла содержится два числа n - размер массива и k.( 1 ≤ kn ≤ 3 · 10^7 ). Во второй строке находятся числа A, B, C, a1 , a2 по модулю не превосходящие 10^9. Вы должны получить элементы массива начиная с третьего по формуле: ai = Aai−2 + Bai−1 + C. Все вычисления должны производится в 32 битном знаковом типе, переполнения должны игнорироваться.

Формат выходного файла

Выведите значение k-ое в порядке возрастания число в массиве a.

Пример

kth.in

5 3
2 3 5 1 2

kth.out

13

kth.in

5 3
200000 300000 5 1 2

kth.out

2

Во втором примере элементы массива a равны: ( 1 , 2 , 800005 ,− 516268571 , 1331571109 ).

I. Двоичный поиск

Имя входного файла: binsearch.in

Имя выходного файла: binsearch.out

Дан массив из n элементов, упорядоченный в порядке неубывания и m запросов: найти первое и последнее вхождение числа в массив.

Формат входного файла

В первую строке входного файла содержится одно число n - размер массива.( 1 ≤ n ≤ 100000 ). Во второй строке находится n чисел в порядке неубывания - элементы массива. В третьей строке находится число m - количество запросов. В следующей строке находится m чисел - запросы.

Формат выходного файла

Для каждого запроса выведите в отдельной строке номер первого и последнего вхождения этого числа в массив. Если числа в массиве нет выведите два раза -1.

Пример

binsearch.in

5
1 1 2 2 2
3
1 2 3

binsearch.out

1 2
3 5
-1 -1

J. Гирлянда

Имя входного файла: garland.in

Имя выходного файла: garland.out

Гирлянда состоит из n лампочек на общем проводе. Один её конец закреплён на заданной высоте A мм (h1 = A). Благодаря силе тяжести гирлянда прогибается: высота каждой неконцевой лампы на 1 мм меньше, чем средняя высота ближайших соседей (hi = (hi−1 + hi+1)/2 − 1 для 1 < i < N). Требуется найти минимальную высоту второго конца B (B = hn) при условии, что ни одна из лампочек не должна лежать на земле (hi > 0 для 1 ≤ iN).

Формат входного файла

В первую строке входного файла содержится два числа n и A ( 3 ≤ n ≤ 1000 , n - целое, 10 ≤ A ≤ 1000 ,A - вещественное).

Формат выходного файла

Вывести одно вещественное число B с двумя знаками после запятой.

Пример

garland.in

8 15

garland.out

9.75

garland.in

692 532.81 

garland.out

446113.34

K. Поезда

Имя входного файла: trains.in

Имя выходного файла: trains.out

В связи с участившимся числом аварий на железнодорожной ветке Москва–Саратов, руководство железной дороги решило изменить график движения поездов. Тщательный анализ состояния железнодорожного полотна показал, что оптимальным является следующий график движения поездов с учетом остановок на станциях: сначала поезд идет на протяжении T1 минут со скоростью V1 метров в минуту, затем T2 минут со скоростью V2 метров в минуту, ..., наконец, TN минут со скоростью VN метров в минуту. В течение некоторых интервалов поезд может стоять (скорость равна 0). По действующей инструкции обеспечения безопасности движения поездов расстояние между локомотивами двух следующих друг за другом поездов должно быть не менее L метров. Определите минимально допустимый интервал в минутах между отправлениями поездов, позволяющий им двигаться по этому графику без опасного сближения.

Формат входного файла

В первых двух строках входного файла содержится два натуральных числа, задающие минимально допустимое расстояние L и количество участков пути N ( 100 ≤ L ≤ 10 000, 1 ≤ N ≤ 1000 ). Далее следует N пар целых чисел Ti и Vi, задающих график движения поездов ( 1 ≤ Ti ≤ 1000 , 0 ≤ Vi ≤ 1000 ).

Формат выходного файла

В выходной файл необходимо вывести искомый интервал между отправлениями поездов в минутах, не менее чем с тремя верными знаками после десятичной точки.

Пример

trains.in

1000
4
10 0
30 80
15 0
20 100

trains.out

27.500