← 查看本卷题目 第 80 / 324 题

消息查找

1 秒 / 测试点 · 512 MiB · 18 个测试点。

题目描述

小 A 的消息记录中有 nn 条消息,依次以 1,2,…,n1,2,\ldots,n 编号。编号小的消息发送时间早于编号大的消息。

一条消息可以引用一条编号小于它的消息,也可以不引用消息。小 A 注意到消息记录里有引用的消息数量不会非常多。消息记录的一个例子是:

  • 【消息 1】小 A:有人做了今天的第一题吗?
  • 【消息 2】小 A:我第一题 WA 了,可能是什么原因?
  • 【消息 3:引用消息 1】小 B:我我我
  • 【消息 4:引用消息 2】小 C:我也 WA 了
  • 【消息 5:引用消息 2】小 B:是不是没开 long long?
  • 【消息 6:引用消息 5】小 A:改了就 AC 了,太厉害了!

对于消息 ii(1≤i≤n1 \le i \le n),小 A 以 rir_i 标记消息 ii 是否有引用,以及所引用的消息编号。如果 ri>0r_i>0,则消息 ii 为引用了消息 rir_i;如果 ri=0r_i=0,则消息 ii 没有引用消息。

消息记录里有非常多条消息。为了快速查找所需要的消息,小 A 准备实现一个简单的消息查找工具。消息查找工具任意时刻只能定位恰好一条消息,如果当前位于消息 ii(1<i≤n1<i\le n),那么接下来可以选择以下两种操作之一:

  • 定位到消息 i−1i-1;
  • 如果消息 ii 引用了消息 rir_i,定位到消息 rir_i。

以上操作可以执行任意次(包括零次)。

小 A 有 qq 次询问。在第 kk(1≤k≤q1\le k\le q)次询问中,小 A 给出消息编号 xk,ykx_k,y_k(yk<xky_k<x_k)。小 A 想知道,如果当前消息查找工具位于 xkx_k,至少需要多少次操作才能定位到消息 yky_k。

输入格式

第一行,两个正整数 n,qn,q,分别表示消息条数与询问次数。

第二行,nn 个非负整数 r1,r2,…,rnr_1,r_2,\ldots,r_n,表示消息的引用关系,具体含义见题目描述。

接下来 qq 行中的第 kk 行(1≤k≤q1\le k\le q)包含两个正整数 xk,ykx_k,y_k,表示一次询问。

保证至多只有 10001000 条引用消息。

输出格式

输出 qq 行,每行一个整数,表示将界面从消息 xkx_k 切换到消息 yky_k 所需的最少操作次数。

输入样例 1

6 30 0 1 2 2 54 16 26 3

输出样例 1

223

输入样例 2

5 50 0 0 1 34 14 25 15 25 3

输出样例 2

12221

数据范围

对于 40%40\% 的测试点,保证 1≤n≤20001\le n\le 2000,1≤q≤20001\le q\le 2000。

对于所有测试点,保证 1≤n≤1051\le n\le 10^5,1≤q≤1051\le q\le 10^5,0≤ri<i0\le r_i<i,1≤yk<xk≤n1\le y_k<x_k\le n,保证至多有 10001000 条引用消息。