#CF1117G. Recursive Queries

Recursive Queries

markdown

G. 递归查询

时间限制:每个测试点 44
内存限制:每个测试点 256256 MB
输入:标准输入
输出:标准输出

题目描述

给定一个 11nn 的排列 p1,p2,,pnp_1, p_2, \dots, p_n。你需要回答 qq 个查询。每个查询是一个数对 (li,ri)(l_i, r_i),你需要计算 f(li,ri)f(l_i, r_i)

定义 m(l,r)m(l, r) 为子段 pl,pl+1,,prp_l, p_{l+1}, \dots, p_r 中最大值所在的位置。
那么

$$f(l, r) = \begin{cases} (r - l + 1) + f(l, m(l, r) - 1) + f(m(l, r) + 1, r) & \text{若 } l \le r \\ 0 & \text{否则} \end{cases} $$

输入格式

第一行包含两个整数 nnqq1n1061 \le n \le 10^61q1061 \le q \le 10^6)—— 排列的大小和查询的数量。
第二行包含 nn 个两两不同的整数 p1,p2,,pnp_1, p_2, \dots, p_n1pin1 \le p_i \le n,且当 iji \ne jpipjp_i \ne p_j)—— 给定的排列。
第三行包含 qq 个整数 l1,l2,,lql_1, l_2, \dots, l_q —— 每个查询的左端点。
第四行包含 qq 个整数 r1,r2,,rqr_1, r_2, \dots, r_q —— 每个查询的右端点。
数据保证对于所有查询,有 1lirin1 \le l_i \le r_i \le n

输出格式

输出 qq 个整数 —— 每个查询对应的 f(li,ri)f(l_i, r_i) 的值。

样例

输入

4 5
3 1 4 2
2 1 1 2 1
2 3 4 4 1

输出

1 6 8 5 1

样例解释

各查询的计算过程如下:

  • f(2,2)=(22+1)+f(2,1)+f(3,2)=1+0+0=1f(2,2) = (2-2+1) + f(2,1) + f(3,2) = 1 + 0 + 0 = 1
  • $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$
  • f(1,4)=(41+1)+f(1,2)+f(4,4)=4+3+1=8f(1,4) = (4-1+1) + f(1,2) + f(4,4) = 4 + 3 + 1 = 8
  • f(2,4)=(42+1)+f(2,2)+f(4,4)=3+1+1=5f(2,4) = (4-2+1) + f(2,2) + f(4,4) = 3 + 1 + 1 = 5
  • f(1,1)=(11+1)+0+0=1f(1,1) = (1-1+1) + 0 + 0 = 1