#P51418. 「COCI 2020.12」Specijacija

「COCI 2020.12」Specijacija

题目描述

译自 COCI 2020/2021 Contest #3 T5. Specijacija

给定一个长度为 nn 的正整数序列 a1na_{1 \ldots n} ,满足 i(i1)2<aii(i+1)2 \frac{i(i-1)}{2} < a_i \le \frac{i(i+1)}{2}

通过这一个序列构造一个有 (n+1)(n+2)2\frac{(n+1)(n+2)}{2} 个节点的二叉树。该二叉树有 n+1n+1 层,第 ii 层有 ii 个节点。

ii 层包含编号为 i(i1)2+1,,i(i+1)2\frac{i(i-1)}{2} + 1, \ldots,\frac{i(i+1)}{2} 的节点。节点 aia_i 有两个儿子,而同一层的其他节点则只有一个儿子。

比如,序列 {1,2,6}\{1,2,6\} 所构造的树就是这样的。

qq 组询问,给定 x,yx, y ,你需要求出节点 x,yx, y 的最近公共祖先。

输入格式

第一行包含三个整数 n,q,tn,q,t ,分别表示序列的长度、询问次数和关于强制在线的参数。

第二行有 nn 个正整数,第 ii 个数为 aia_i

接下来的 qq 行中每一行有两个正整数 xi~,yi~\tilde{x_i}, \tilde{y_i} ,即询问的参数 xi,yix_i, y_i 加密后的结果。

其中:

xi=((x~i1+tzi1)mod(n+1)(n+2)2)+1yi=((y~i1+tzi1)mod(n+1)(n+2)2)+1\begin{array}{l} x_{i}=\left(\left(\tilde{x}_{i}-1+t \cdot z_{i-1}\right) \bmod \frac{(n+1)(n+2)}{2}\right)+1 \\ y_{i}=\left(\left(\tilde{y}_{i}-1+t \cdot z_{i-1}\right) \bmod \frac{(n+1)(n+2)}{2}\right)+1 \end{array}

ziz_i 为第 ii 组询问的答案,如果 i=0i = 0 ,则置 ziz_i00

注意到当 t=0t = 0xi=xi~x_i = \tilde{x_i}yi=yi~y_i = \tilde{y_i}

输出格式

输出共 qq 行,其中第 ii 行一个正整数,表示 xi,yix_i, y_i 的最近公共祖先。

样例 1

3 5 0
1 2 6
7 10
8 5
6 2
9 10
2 3
1
5
1
6
1
3 5 1
1 2 6
7 10
8 5
6 2
9 10
2 3
1
6
2
1
1

两个样例所表示的树就是上图所描述的树。

第二个样例中真实的 x,yx, y 列举如下:

  • x1=7,y1=10x_1 = 7, y_1 = 10
  • x2=9,y2=6x_2 = 9, y_2 = 6
  • x3=2,y3=8x_3 = 2, y_3 = 8
  • x4=1,y4=2x_4 = 1, y_4 = 2
  • x5=3,y5=4x_5 = 3, y_5 = 4

数据范围与提示

对于所有子任务,保证 1n,q2×105,t{0,1}1 \le n,q \le 2 \times 10^5, t \in \{0,1\}

详细子任务附加限制与分值如下表:

子任务 附加限制 分值
11 q=1,t=0 q = 1, t = 0 10/11010/110
22 n1000,t=0n \le 1000, t = 0 10/11010/110
33 t=0t = 0 30/11030/110
44 t=1t = 1 60/11060/110