ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила

2170. Эксперимент с соком 2

Ограничение времени: 3.0 секунды
Ограничение памяти: 512 МБ
Саша всё ещё любит физику. У Саши всё ещё нет друзей. Неизвестно, связаны ли эти два факта до сих пор, но Саша всё ещё очень сильно переживает из-за отсутствия товарищей. Поэтому он снова решил поразить Вадима своим экспериментом, но на этот раз немного другим.
Саша взял 2N сосудов, поставил их в один ряд и налил в них по 1 литру сока, в i-м сосуде температура сока равна ti. После этого он принёс эту установку Вадиму, чтобы показать эксперимент. К сожалению, Вадим до сих пор не любит физику, но его заинтересовал немного другой вопрос.
Вадим пронумеровал сосуды слева направо числами от 1 до 2N. Он хочет узнать, сколько времени займёт смешивание сока из сосудов из отрезка с lj-го по (lj + 2pj − 1)-й по простому алгоритму:
  1. Вадим берёт каждый второй сосуд и переливает его содержимое в левый от него сосуд, выкидывая эти пустые склянки из отрезка;
  2. Затем он ждёт, пока в каждой склянке сок не смешался полностью и не принял общую температуру по всему сосуду;
  3. Когда температура равномерно распределилась по каждому сосуду, Вадим повторяет первый шаг. Он снова переливает сок из каждого второго сосуда на отрезке в левый от него сосуд;
  4. Чтобы не ждать выполнения прошлых шагов, Вадим заранее определил, какие склянки и на каком этапе алгоритма ему придётся смешать, и переливает соответствующую пару сразу после того, как температура сока в этих двух сосудах стала постоянной;
  5. Вадим выполняет этот алгоритм, пока весь сок на отрезке не окажется в одном сосуде.
У Вадима есть Q вопросов такого типа, которые он спросил у Саши. Саша быстро догадался, что смешивать и проверять это всё будет довольно трудно, поэтому решил провести эксперименты в уме. Он вспомнил несколько формул из физики, которые ему пригодятся. Чтобы определить температуру сока tf после смешивания сосудов с V1 и V2 литрами и t1 и t2 градусами сока соответственно, можно воспользоваться формулой:
tf = (V1 · t1 + V2 · t2) / (V1 + V2).
А чтобы определить время смешивания Tf, нужно знать коэффициент скорости смешивания одинаковых жидкостей различной температуры cw. Для сока он равен 1 л · град / (сек). Тогда формула такая:
Tf = (|tft1| · V1 + |tft2| · 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 ≤ pjN, lj + 2pj − 1 ≤ 2N).

Результат

Выведите Q чисел — время, затраченное на смешивание по предложенному Вадимом алгоритму, в секундах в порядке ввода.
Ответ будет засчитан, если абсолютная или относительная погрешность значений не превосходит 10−9. Формально, пусть ваш ответ равен x, а ответ жюри равен y. Ваш ответ считается правильным, если |xy| / max(1,|y|) ≤ 10−9.

Пример

исходные данныерезультат
2 2
1 2 3 4
2 1
1 2
1.0
5.0
Автор задачи: Вадим Баринов
Источник задачи: Уральская командная олимпиада по программированию 2022