题目描述
有一天,伯利兰国的公主伯伦卡决定给她的熟人ReLu一个惊喜。知道ReLu和她一样对加密货币感兴趣,伯伦卡决定创建自己的区块链加密货币 Pether。
在参加了一系列由网络安全个人成长专家教练提供的课程和培训后,伯伦卡决定 Pether 必须得到最佳保护。因此,由于极其复杂和混乱的限制,并非所有用户都可以相互交换 Pether。
Pether 区块链货币的系统确实复杂而混乱。所有用户编号为从 1 到 n 的整数。每个用户被分配一个唯一的标识符 ai。此外,货币还固定了一个参数 d——安全参数。
用户 i 只能直接将货币转账给用户 j,如果满足 i<j 且 ai<aj。但这还不够!直接转账是通过一系列中间用户进行一系列交易完成的。在每次交易过程中,每个后续中间用户(包括最终用户 j)的编号必须递增,但增量不得超过 d。此外,除 i 和 j 外的所有中间用户的标识符必须严格小于 ai。
更正式地说,用户 i 可以直接将加密货币转账给用户 j,如果满足以下条件:
- i<j
- ai<aj
- 存在一个长度为 k 的中间用户序列 x,使得:
- i=x1<x2<…<xk−1<xk=j
- 对于所有 1≤t≤k−1,xt+1−xt≤d
- 对于所有 2≤t≤k−1,axt<ai
伯伦卡请你——她的程序员熟人——帮助解析这个系统,并为一些用户对确定他们如何相互传递 Pether。
你需要回答 q 个查询。在每个查询中,你需要确定是否存在一个直接转账序列(可能通过中间用户),使得从用户 ui 到用户 vi 可以传递 Pether。在某些查询中,还需要最小化从 ui 到 vi 传递货币所需的直接转账次数。注意,在每次直接转账中不需要最小化交易次数。
输入格式
第一行包含三个整数 n,d,g (1≤n,d≤300000,0≤g≤12),分别表示用户数量、安全参数和子任务编号。
第二行包含 n 个整数 a1,a2,…,an (1≤ai≤n),表示用户的标识符。保证所有 ai 互不相同。
第三行包含一个整数 q (1≤q≤300000),表示查询数量。
接下来的 q 行,每行包含三个整数 ti,ui,vi (ti∈{1,2},1≤ui<vi≤n),其中 ui 是需要发送货币的用户,vi 是需要接收货币的用户。如果 ti=1,则需要确定是否可以传递货币;如果 ti=2,则需要额外最小化直接转账次数。
输出格式
输出 q 行,第 i 行是第 i 个查询的答案。
如果无法从用户 ui 传递货币到用户 vi,则对第 i 个查询输出 0。否则,如果 ti=1,输出 1;如果 ti=2,输出从 ui 到 vi 传递 Pether 所需的最小直接转账次数。
6 1 0
2 1 3 4 5 6
6
2 1 3
2 1 2
1 1 4
2 1 5
2 1 6
1 2 6
1
0
1
3
4
1
6 2 0
1 2 3 4 5 6
6
2 1 5
2 2 5
2 1 6
2 2 6
2 1 4
2 2 4
2
2
3
2
2
1
10 2 0
2 1 4 3 5 6 8 7 10 9
10
2 1 5
1 2 5
2 3 5
2 1 9
2 5 8
2 3 9
2 1 8
1 1 2
2 3 8
2 1 9
2
1
1
4
2
3
3
0
2
4
数据范围与提示
详细子任务附加限制及分值如下表所示:
子任务 |
分值 |
附加限制 |
子任务依赖 |
备注 |
1 |
10 |
n≤100,q≤100 |
|
|
2 |
7 |
n≤1000 |
1 |
3 |
14 |
an=n,vi=n |
|
4 |
10 |
q=1,vi=n |
5 |
9 |
vi=n |
3,4 |
6 |
7 |
ti=2 |
|
答案不超过 10 |
7 |
7 |
1,6 |
答案不超过 150 |
8 |
13 |
ti=1 |
|
|
9 |
10 |
n≤50000,q≤50000 |
1 |
10 |
4 |
n≤100000,q≤100000 |
1,9 |
11 |
4 |
n≤200000,q≤200000 |
1,9,10 |
12 |
5 |
|
0∼11 |