#L3364. 植物比较

植物比较

题目描述

植物学家 Hazel 参观过新加坡植物园的一个特别展览。在这次展览中,有 nn 棵高度互不相同的植物,它们排成了一个圆。这些植物按顺时针方向从 00n1n-1 编号,植物 n1n-1 与植物 00 是相邻的。

对于每棵植物 ii (0in1)(0 \le i \le n-1),Hazel 将它与顺时针方向的后 k1k-1 棵植物进行比较,记录下数值 rir_i 以表示这 k1k-1 棵植物中有多少棵的高度大于植物 ii。因此,每个 rir_i 的数值是由某段连续 kk 棵植物的相对高度决定的。

例如,假设 n=5n=5k=3k=3i=3i=3。植物 33 顺时针方向的后 k1=2k-1=2 棵植物是植物 44 和植物 00。如果植物 44 比植物 33 高,且植物 00 比植物 33 矮,那么 Hazel 将会记录 r3=1r_3 = 1

你可以假设 Hazel 记录的数值 rir_i 都是正确的。也就是说,这些植物至少存在一组互不相同的高度符合 Hazel 所记录的数值。

本题要求你比较 qq 对植物的高度。由于你没有机会参观这次展览,你仅有的信息来源是 Hazel 的笔记本,其中记录了 kk 和序列 r0,,rn1r_0, \ldots, r_{n-1} 的值。
对于每对需要比较的植物 xxyyxxyy 不同),判定它们符合以下哪种情况:

  1. 植物 xx 一定比植物 yy 高:对于任意一组符合数组 rr 且互不相同的高度 h0,,hn1h_0, \ldots, h_{n-1},都有 hx>hyh_x > h_y
  2. 植物 xx 一定比植物 yy 矮:对于任意一组符合数组 rr 且互不相同的高度 h0,,hn1h_0, \ldots, h_{n-1},都有 hx<hyh_x < h_y
  3. 该比较没有定论:以上两种情况都不成立。

实现细节

要求你实现以下函数:

  • void init(int k, int[] r)

    • kk:决定每个 rir_i 数值的连续植物的棵数。
    • rr:一个大小为 nn 的数组,其中 rir_i 是植物 ii 顺时针方向的后 k1k-1 棵植物中比它高的棵数。
    • 该函数恰好被调用一次,且在对 compare_plants 的任何调用之前。
  • int compare_plants(int x, int y)

    • x,yx, y:待比较的植物的编号。
    • 该函数应该返回:
      • 11:如果植物 xx 一定比植物 yy 高,
      • 1-1:如果植物 xx 一定比植物 yy 矮,
      • 00:如果该比较没有定论。
    • 该函数恰好被调用 qq 次。

评测程序示例

评测程序示例以如下格式读取输入数据:

  • 11 行:n k qn\ k\ q
  • 22 行:r0 r1  rn1r_0\ r_1\ \ldots\ r_{n-1}
  • 3+i3+i (0iq1)(0 \le i \le q-1) 行:x yx\ y,表示第 ii 次调用 compare_plants 时的参数

评测程序示例以如下格式打印你的答案:

  • 1+i1+i (0iq1)(0 \le i \le q-1) 行: 第 ii 次调用 compare_plants 的返回值

样例 1

输入

4 3 2
0 1 1 2
0 2
1 2

输出

1
-1

解释
考虑以下调用:

  • init(3, [0, 1, 1, 2])
  • 假设评测程序调用了 compare_plants(0, 2)。由 r0=0r_0=0 可以推断植物 22 不比植物 00 高,因此该调用应该返回 11
  • 假设评测程序接下来调用了 compare_plants(1, 2)。由于对每组符合以上条件的植物高度,都有植物 11 比植物 22 矮,因此该调用应该返回 1-1

样例 2

输入

4 2 2
0 1 0 1
0 3
1 3

输出

1
0

解释
考虑以下调用:

  • init(2, [0, 1, 0, 1])
  • 假设评测程序调用了 compare_plants(0, 3)。由 r3=1r_3=1 可以推断植物 00 比植物 33 高,因此该调用应该返回 11
  • 假设评测程序接下来调用了 `compare_plants(1, 3)。两组高度。两组高度 [3,1,4,2][3,2,4,1]$ 都符合 Hazel 的观测记录,由于在第一种情况中植物 11 比植物 33 矮,而在第二种情况中它比植物 33 高,因此该调用应该返回 00

数据范围与提示

对于 100%100\% 的数据,满足:

  • 2kn2000002 \le k \le n \le 200\,000
  • 1q2000001 \le q \le 200\,000
  • 0rik10 \le r_i \le k-1(对所有 0in10 \le i \le n-1
  • 0x<yn10 \le x < y \le n-1
  • 存在一组或多组互不相同的高度符合数组 rr 记录的情况

子任务

子任务 附加限制 分值
1 k=2k=2 5
2 n5000n \le 50002k>n2 \cdot k > n 14
3 2k>n2 \cdot k > n 13
4 每次 compare_plants 调用的正确答案是 111-1 17
5 n300n \le 300qn(n1)2q \le \frac{n \cdot (n-1)}{2} 11
6 每次调用 compare_plants 时有 x=0x=0 15
7 没有附加约束条件 25