eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Купание Мистера 01011

Купание Мистера 01011

Лимит времени 1 секунда
Лимит использования памяти 64 MiB

В один прохладный вечер Містер 01011 захотел искупаться в своём резервуаре с некоторой жидкостью плотностью ρ. Но эта жидкость была чрезвычайно холодной, поэтому купаться было невозможно. Тогда, чтобы провести как можно больше времени в своём волшебном резервуаре, который состоит из N отделений разной плотности , Мистер 01011 решил провести несколько экспериментов по плаванию тел в резервуаре (этим телам температура жидкости в резервуаре безразлична). Каждое тело имеет вмонтированное устройство, которое позволяет мгновенно увеличивать или уменьшать обём тела. Тело – обычный куб с заданной плотностью и длиной ребра. При погружении тела в некоторый резервуар некоторая часть тела окажется погруженной в воду. Вас будет интересовать собственно объём погруженной части тела.

Каждый эксперимент состоит и следующих случаев:

  • Положить тело в некоторый резервуар (INS)

  • Забрать тело с некоторого резервуара (DEL)

  • Увеличить объём некоторого тела в некотором резервуаре (INC)

  • Уменьшить объём некоторого тела в некотором резервуаре (DEC)

  • Для каждого тела, лежащего в резервуаре [L, R], нужно посчитать объём погруженной его части, и потом результатом на запрос будет сумма всех объёмовов погружённых частей (CALC).

Все процессы происходят при постоянных температуре и давлении.

Входные данные

На вход подаётся целое число N (N10^5) – количество резервуаров. В последующих N строках задано плотность жидкости в каждом резервуаре ρ_i кг/м­^3 (1ρ_i20000, вещественное число). В следудующей строке задано число Q (Q10^5) – количество экспериментов. Каждая из последующих Q строк имеет один из следующих видов:

  • INS X Y Z – где X – номер резервуара, в который помещают тело (целое число), Y – плотность тела (1Y20000, вещественное число, в кг/м­^3), Z – сторона ребра куба (1Z1000, вещественное число, задано в метрах).

  • DEL X – где X (целое число) – порядковый номер куба, который нужно забрать из некоторого резервуара. Если этот куб ещё не положен в никакой резервуар, данную команду нужно игнорировать.

  • INC X Y – где X (целое число) – порядковый номер куба, который увеличивается в размерах, Y (1Y10^9, вещественное число, в м^3) – величина увеличения объёма. Если этот куб ещё не был положен в некоторый резервуар или уже был забран из него то данную команду игнорировать.

  • DEC X Y – где X (целое число) – порядковый номер куба, который уменьшатся в размерах, Y (1Y10^9, вещественное число, в м^3) – величина уменьшения объёма. Если этот куб ещё не был положен в некоторый резервуар или уже был забран из него, то данную команду игнорировать. Если тело имеет объём, меньший за Y, то просто считать, чт в резервуаре находится тело массой 0 и объёмом 0.

  • CALC L R – где L, R (1L, RN) – целые числа. Посчитать суммарный объём погруженных частей тел, находящихся в резервуарах с номерами от L до R.

Каждый резервуар имеет достаточное количество места, чтобы жидкость из него при погружении не выливалась. Тела получают порядковые номера начиная с 1 в той последовательности, в которой они идут в запросах INS.

Після каждого запроса вывести ответ на запрос CALC 1 N с новой строки, а также дополнительно после запросов типа CALC выводить с новой строки ответ на него. То есть, если поступил запрос CALC L R, то сначала нужно дать ответ на запрос типа CALC 1 N, а потом с новой строки на запрос CALC L R.

Ответы на запросы выводить с точностью не менее 4 знаков после запятой.

Пояснение к примеру: У нас есть 5 резервуаров с плотностью 1000. Также есть 10 запросов.

  1. INS 1 800 2 – виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

  2. INC 1 4 - виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

  3. DEL 2 - виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

  4. INS 3 1200 5 - виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

  5. INS 4 300 10 - виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

  6. DEC 2 25 - виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

  7. CALC 1 3 – выводим на экран результат запроса CALC 1 5 а потом выполняем этот запрос

  8. INC 3 500 - виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

  9. CALC 3 4 3 – выводим на экран результат запроса CALC 1 5 а потом выполняем этот запрос

  10. DEL 1 - виполняем данный заппрос и на экран выводим результат запроса CALC 1 5

Пример

Входные данные #1
5
1000
1000
1000
1000
1000
10
INS 1 800 2
INC 1 4
DEL 2
INS 3 1200 5
INS 4 300 10
DEC 2 25
CALC 1 3
INC 3 500
CALC 3 4
DEL 1
Выходные данные #1
6.400000
9.600000
9.600000
134.600000
434.600000
409.600000
409.600000
109.600000
559.600000
559.600000
550.000000
550.000000