Олимпиадный тренинг

Задача . G. Рекурсивные запросы


Вам задана перестановка \(p_1, p_2, \dots, p_n\). Вам необходимо ответить на \(q\) запросов. Каждый запрос представляет из себя пару \((l_i, r_i)\) и Вам необходимо посчитать \(f(l_i, r_i)\).

Пусть \(m_{l, r}\) — это позиция максимума в подотрезке \(p_l, p_{l+1}, \dots, p_r\).

Тогда, \(f(l, r) = (r - l + 1) + f(l, m_{l,r} - 1) + f(m_{l,r} + 1, r)\) если \(l \le r\) либо \(0\) в противном случае.

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

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n \le 10^6\), \(1 \le q \le 10^6\)) — длина перестановки \(p\) и количество запросов.

Во второй строке заданы \(n\) попарно различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), \(p_i \neq p_j\) for \(i \neq j\)) — перестановка \(p\).

В третьей строке заданы \(q\) целых чисел \(l_1, l_2, \dots, l_q\) — первые половины запросов.

В четвертой строке заданы \(q\) целых чисел \(r_1, r_2, \dots, r_q\) — вторые половины запросов.

Гарантируется, что \(1 \le l_i \le r_i \le n\) для всех запросов.

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

Выведите \(q\) целых чисел — значения \(f(l_i, r_i)\) для соответствующих запросов.

Примечание

Разбор запросов:

  1. \(f(2, 2) = (2 - 2 + 1) + f(2, 1) + f(3, 2) = 1 + 0 + 0 = 1\);
  2. \(f(1, 3) = (3 - 1 + 1) + f(1, 2) + f(4, 3) = 3 + (2 - 1 + 1) + f(1, 0) + f(2, 2) = 3 + 2 + (2 - 2 + 1) = 6\);
  3. \(f(1, 4) = (4 - 1 + 1) + f(1, 2) + f(4, 4) = 4 + 3 + 1 = 8\);
  4. \(f(2, 4) = (4 - 2 + 1) + f(2, 2) + f(4, 4) = 3 + 1 + 1 = 5\);
  5. \(f(1, 1) = (1 - 1 + 1) + 0 + 0 = 1\).

Примеры
Входные данныеВыходные данные
1 4 5
3 1 4 2
2 1 1 2 1
2 3 4 4 1
1 6 8 5 1

time 4000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя