A106061.[GESP202603 八级] 消息查找
提高+/省选-
GESP
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
小 A 的消息记录中有 n 条消息,依次以 1,2,…,n 编号。编号小的消息发送时间早于编号大的消息。
一条消息可以引用一条编号小于它的消息,也可以不引用消息。小 A 注意到消息记录里有引用的消息数量不会非常多。消息记录的一个例子是:
- 【消息 1】小 A:有人做了今天的第一题吗?
- 【消息 2】小 A:我第一题 WA 了,可能是什么原因?
- 【消息 3:引用消息 1】小 B:我我我
- 【消息 4:引用消息 2】小 C:我也 WA 了
- 【消息 5:引用消息 2】小 B:是不是没开 long long?
- 【消息 6:引用消息 5】小 A:改了就 AC 了,太厉害了!
对于消息 i (1≤i≤n),小 A 以 ri 标记消息 i 是否有引用,以及所引用的消息编号。如果 ri>0,则消息 i 为引用了消息 ri;如果 ri=0,则消息 i 没有引用消息。
消息记录里有非常多条消息。为了快速查找所需要的消息,小 A 准备实现一个简单的消息查找工具。消息查找工具任意时刻只能定位恰好一条消息,如果当前位于消息 i (1<i≤n),那么接下来可以选择以下两种操作之一:
- 定位到消息 i−1;
- 如果消息 i 引用了消息 ri,定位到消息 ri。
以上操作可以执行任意次(包括零次)。
小 A 有 q 次询问。在第 k (1≤k≤q) 次询问中,小 A 给出消息编号 xk,yk (yk<xk)。小 A 想知道,如果当前消息查找工具位于 xk,至少需要多少次操作才能定位到消息 yk。
输入格式
第一行,两个正整数 n,q,分别表示消息条数与询问次数。
第二行,n 个非负整数 r1,r2,…,rn,表示消息的引用关系,具体含义见题目描述。
接下来 q 行中的第 k 行 (1≤k≤q) 包含两个正整数 xk,yk,表示一次询问。
保证至多只有 1000 条引用消息。
输出格式
输出 q 行,每行一个整数,表示将界面从消息 xk 切换到消息 yk 所需的最少操作次数。
输入输出样例
输入#1
6 3 0 0 1 2 2 5 4 1 6 2 6 3
输出#1
2 2 3
输入#2
5 5 0 0 0 1 3 4 1 4 2 5 1 5 2 5 3
输出#2
1 2 2 2 1
说明/提示
对于所有测试点,保证 1≤n≤105,1≤q≤105,0≤ri<i,1≤yk<xk≤n,保证至多有 1000 条引用消息。