A3734 「OOI 2024 Day 2」伯伦卡与 Pether

暂无评定 传统题 国际知名赛事 上传者
时间限制3000ms
内存限制1024MiB
通过 / 提交0/0

A3734「OOI 2024 Day 2」伯伦卡与 Pether

暂无评定 传统题 国际知名赛事 上传者
时间限制3000ms
内存限制1024MiB
通过 / 提交0/0

题目描述

题目译自 Open Olympiad in Informatics 2024 Day2 T3 「Три массива / Three Arrays」。

有一天,伯利兰国的公主伯伦卡决定给她的熟人ReLu一个惊喜。知道ReLu和她一样对加密货币感兴趣,伯伦卡决定创建自己的区块链加密货币 Pether。

在参加了一系列由网络安全个人成长专家教练提供的课程和培训后,伯伦卡决定 Pether 必须得到最佳保护。因此,由于极其复杂和混乱的限制,并非所有用户都可以相互交换 Pether。

Pether 区块链货币的系统确实复杂而混乱。所有用户编号为从 11 到 nn 的整数。每个用户被分配一个唯一的标识符 aia_{i}。此外,货币还固定了一个参数 dd——安全参数。

用户 ii 只能直接将货币转账给用户 jj,如果满足 i<ji < j 且 ai<aja_i < a_j。但这还不够!直接转账是通过一系列中间用户进行一系列交易完成的。在每次交易过程中,每个后续中间用户(包括最终用户 jj)的编号必须递增,但增量不得超过 dd。此外,除 ii 和 jj 外的所有中间用户的标识符必须严格小于 aia_i。

更正式地说,用户 ii 可以直接将加密货币转账给用户 jj,如果满足以下条件:

  1. i<ji < j
  2. ai<aja_{i} < a_{j}
  3. 存在一个长度为 kk 的中间用户序列 xx,使得:
    • i=x1<x2<…<xk−1<xk=ji = x_1 < x_2 < \ldots < x_{k-1} < x_{k} = j
    • 对于所有 1≤t≤k−11 \le t \le k - 1,xt+1−xt≤dx_{t + 1} - x_{t} \le d
    • 对于所有 2≤t≤k−12 \le t \le k - 1,axt<aia_{x_t} < a_{i}

伯伦卡请你——她的程序员熟人——帮助解析这个系统,并为一些用户对确定他们如何相互传递 Pether。

你需要回答 qq 个查询。在每个查询中,你需要确定是否存在一个直接转账序列(可能通过中间用户),使得从用户 uiu_i 到用户 viv_i 可以传递 Pether。在某些查询中,还需要最小化从 uiu_i 到 viv_i 传递货币所需的直接转账次数。注意,在每次直接转账中不需要最小化交易次数。

输入格式

第一行包含三个整数 n,d,gn, d, g (1≤n,d≤300000,0≤g≤12)(1 \leq n, d \leq 300000, 0 \leq g \leq 12),分别表示用户数量、安全参数和子任务编号。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n (1≤ai≤n)(1 \leq a_{i} \leq n),表示用户的标识符。保证所有 aia_i 互不相同。

第三行包含一个整数 qq (1≤q≤300000)(1 \leq q \leq 300000),表示查询数量。

接下来的 qq 行,每行包含三个整数 ti,ui,vit_{i}, u_{i}, v_{i} (ti∈{1,2},1≤ui<vi≤n)(t_{i} \in \{1, 2\}, 1 \leq u_{i} < v_{i} \leq n),其中 uiu_i 是需要发送货币的用户,viv_i 是需要接收货币的用户。如果 ti=1t_i = 1,则需要确定是否可以传递货币;如果 ti=2t_i = 2,则需要额外最小化直接转账次数。

输出格式

输出 qq 行,第 ii 行是第 ii 个查询的答案。

如果无法从用户 uiu_i 传递货币到用户 viv_i,则对第 ii 个查询输出 00。否则,如果 ti=1t_i = 1,输出 11;如果 ti=2t_i = 2,输出从 uiu_i 到 viv_i 传递 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

在第一个样例中,可能的直接转账如下:

  • 第一个查询:编号为 11 的用户可以直接转账给编号为 33 的用户,通过中间用户 22 进行 22 次交易。
  • 第二个查询:编号为 11 和 22 的用户之间无法直接转账,因为 a1=2>a2=1a_{1} = 2 > a_{2} = 1。
  • 第三个查询:可以从编号为 11 的用户传递货币到编号为 44 的用户,通过两个直接转账:先从 11 到 33,再从 33 到 44。由于 t3=1t_3 = 1,仅需确认传递可能性,因此答案为 11。
  • 第四个查询:可以通过三个直接转账完成:从 11 到 33,从 33 到 44,从 44 到 55。
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

在第三个样例中,可能的直接转账如下:

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 1010 n≤100n \leq 100,q≤100q \leq 100
22 77 n≤1000n \leq 1000 11
33 1414 an=na_{n} = n,vi=nv_{i} = n
44 1010 q=1q = 1,vi=nv_i = n
55 99 vi=nv_i = n 3,43, 4
66 77 ti=2t_i=2 答案不超过 1010
77 77 1,61, 6 答案不超过 150150
88 1313 ti=1t_i = 1
99 1010 n≤50000n \leq 50000,q≤50000q \leq 50000 11
1010 44 n≤100000n \leq 100000,q≤100000q \leq 100000 1,91, 9
1111 44 n≤200000n \leq 200000,q≤200000q \leq 200000 1,9,101, 9, 10
1212 55 0∼110 \sim 11