EduBrick

A. Сколько обменов при подъёме

2000 мс · 256 МБ · всё или ничего

Как классная задача про увеличение приоритета, но вместо конечного индекса выведите количество обменов, которые сделало просеивание вверх.

Величины связаны просто: количество обменов - это разница глубин начальной и конечной позиции. Но считать её напрямую по формуле нельзя: глубина - это ⌊log⁡2i⌋\lfloor \log_2 i \rfloor, и на границах степеней двойки легко ошибиться. Проще завести счётчик прямо в цикле.

Заодно это способ увидеть, насколько дёшево просеивание на практике: у случайной кучи большинство элементов - листья, и подъём почти всегда останавливается через один-два шага.

Формат ввода

В первой строке - размер кучи NN (1≤N≤1051 \le N \le 10^5), во второй - сама куча из NN различных чисел.

В третьей - число запросов MM (0≤M≤1050 \le M \le 10^5), далее MM пар ii и xx.

Формат вывода

Для каждого запроса - количество обменов.

После всех запросов - строка с кучей в конечном состоянии.

Примеры

ввод
6
12 6 8 3 4 7
2
5 11
3 6
вывод
2
0
15 12 14 3 6 7
Войдите, чтобы отправлять решения.