Саша всё ещё любит физику. У Саши всё ещё нет друзей. Неизвестно, связаны ли эти два факта до сих пор, но Саша всё ещё очень сильно переживает из-за отсутствия товарищей. Поэтому он снова решил поразить Вадима своим экспериментом, но на этот раз немного другим.
Саша взял 2N сосудов, поставил их в один ряд и налил в них по 1 литру сока, в i-м сосуде температура сока равна ti. После этого он принёс эту установку Вадиму, чтобы показать эксперимент. К сожалению, Вадим до сих пор не любит физику, но его заинтересовал немного другой вопрос.
Вадим пронумеровал сосуды слева направо числами от 1 до 2
N. Он хочет узнать, сколько времени займёт смешивание сока из сосудов из отрезка с
lj-го по (
lj + 2
pj − 1)-й по простому алгоритму:
-
Вадим берёт каждый второй сосуд и переливает его содержимое в левый от него сосуд, выкидывая эти пустые склянки из отрезка;
-
Затем он ждёт, пока в каждой склянке сок не смешался полностью и не принял общую температуру по всему сосуду;
-
Когда температура равномерно распределилась по каждому сосуду, Вадим повторяет первый шаг. Он снова переливает сок из каждого второго сосуда на отрезке в левый от него сосуд;
-
Чтобы не ждать выполнения прошлых шагов, Вадим заранее определил, какие склянки и на каком этапе алгоритма ему придётся смешать, и переливает соответствующую пару сразу после того, как температура сока в этих двух сосудах стала постоянной;
-
Вадим выполняет этот алгоритм, пока весь сок на отрезке не окажется в одном сосуде.
У Вадима есть Q вопросов такого типа, которые он спросил у Саши. Саша быстро догадался, что смешивать и проверять это всё будет довольно трудно, поэтому решил провести эксперименты в уме. Он вспомнил несколько формул из физики, которые ему пригодятся. Чтобы определить температуру сока tf после смешивания сосудов с V1 и V2 литрами и t1 и t2 градусами сока соответственно, можно воспользоваться формулой:
tf = (V1 · t1 + V2 · t2) / (V1 + V2).А чтобы определить время смешивания Tf, нужно знать коэффициент скорости смешивания одинаковых жидкостей различной температуры cw. Для сока он равен 1 л · град / (сек). Тогда формула такая:
Tf = (|tf − t1| · V1 + |tf − t2| · V2) / cw.Саша расстроился, что провести эти вычисления в голове очень трудно, поэтому он и просит помощи у Вас.
Исходные данные
В первой строке даны два целых числа N и Q — число, используемое для описания количества сосудов, и количество вопросов, заданных Вадимом (1 ≤ N ≤ 18, 1 ≤ Q ≤ 105).
Во второй строке через пробел даны 2N целых чисел ti — температуры сока в сосудах (0 ≤ ti ≤ 105).
В следующих Q строках описываются вопросы Вадима двумя целыми числами lj и pj, им соответствует отрезок [lj; lj + 2pj − 1] (1 ≤ lj ≤ 2N, 0 ≤ pj ≤ N, lj + 2pj − 1 ≤ 2N).
Результат
Выведите Q чисел — время, затраченное на смешивание по предложенному Вадимом алгоритму, в секундах в порядке ввода.
Ответ будет засчитан, если абсолютная или относительная погрешность значений не превосходит 10−9. Формально, пусть ваш ответ равен x, а ответ жюри равен y. Ваш ответ считается правильным, если |x−y| / max(1,|y|) ≤ 10−9.
Пример
исходные данные | результат |
---|
2 2
1 2 3 4
2 1
1 2
| 1.0
5.0
|
Автор задачи: Вадим Баринов
Источник задачи: Уральская командная олимпиада по программированию 2022