#P13691. [CEOI 2025] highest

    ID: 13553 远端评测题 5000ms 1024MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>倍增2025交互题CEOI(中欧)ST 表

[CEOI 2025] highest

Description

在一个平行宇宙中,Vlad 被困在了未来版的 Poenari 城堡中。该城堡共有 nn 层,编号为 00n1n - 1。在每一层 ii0in10 \leq i \leq n - 1),他只能向上移动:要么走楼梯,需要支付 11 滴血(这是罗马尼亚吸血鬼使用的货币),要么变成蝙蝠通过通风口,这需要支付 22 滴血。楼梯最多能将他向上带 v[i]v[i] 层,而通风口最多能将他向上带 w[i]w[i] 层。这里 vvww 是给定的两个数组:v=v[0],v[1],,v[n1]v = v[0], v[1], \ldots, v[n - 1]w=w[0],w[1],,w[n1]w = w[0], w[1], \ldots, w[n - 1]

形式化地说,在第 ii 层(0in10 \leq i \leq n - 1),Vlad 可以:

  • 以花费 11 滴血的代价,从第 i+1i + 1 层到第 i+v[i]i + v[i] 层的任意一层(不能超过 n1n - 1)。
  • 以花费 22 滴血的代价,从第 i+1i + 1 层到第 i+w[i]i + w[i] 层的任意一层(不能超过 n1n - 1)。

此外,他的兄弟 Radu 和 Mircea 为 Vlad 提出了 mm 个场景,每个场景由两个楼层 AABB 构成(ABA \leq B)。Vlad 需要回答这 mm 个问题:从第 AA 层到第 BB 层,他最少需要牺牲多少滴血?

Input Format

你需要实现以下函数:

std::vector<int> solve(std::vector<int> &v, std::vector<int> &w, std::vector<std::pair<int,int>> &queries);
  • 接收数组 vv(表示从每层出发的楼梯最大可上升的层数)和 ww(表示从每层出发的通风口最大可上升的层数),它们的长度均为 nn
  • 还接收 mm 个询问 queries,一个大小为 mm 的数组,每个元素是一个二元组 (A,B)(A, B),含义如上所述。
  • 返回一个长度为 mm 的数组,包含每个询问的最少血滴消耗。
7
2 3 1 1 1 1 2
3 4 1 2 1 2 2
3
0 4
0 5
0 6
2
3
4
10
1 1 1 2 3 2 1 1 2 3 
2 4 1 4 1 4 1 3 2 3 
5
3 9
0 9
0 7
0 4
3 5
3
5
4
3
1

Hint

样例解释 1

考虑调用:

solve({2, 3, 1, 1, 1, 1, 2}, {3, 4, 1, 2, 1, 2, 2}, {{0, 4}, {0, 5}, {0, 6}})

此时 n=7n = 7,有 33 个询问,v=[2,3,1,1,1,1,2]v = [2, 3, 1, 1, 1, 1, 2]w=[3,4,1,2,1,2,2]w = [3, 4, 1, 2, 1, 2, 2]

对于第一个询问 (0,4)(0, 4),Vlad 需要两次花费 11 滴血的跳跃:从 0011(虽然可以直接跳到 22,但从 11 出发能走得更远),然后从 1144。总花费:1+1=21 + 1 = 2

对于第二个询问 (0,5)(0, 5),有两条最优路径:

  1. 010 \to 1(花费 11),141 \to 4(花费 11),454 \to 5(花费 11);
  2. 010 \to 1(花费 11),151 \to 5(花费 22)。

总花费分别为 1+1+1=31 + 1 + 1 = 31+2=31 + 2 = 3

对于第三个询问 (0,6)(0, 6),一种花费 44 的路径是 010 \to 1(花费 11),151 \to 5(花费 22),565 \to 6(花费 11)。总花费:1+2+1=41 + 2 + 1 = 4

因此函数应返回 {2,3,4}\{2, 3, 4\}

样例解释 2

考虑调用:

solve({1, 1, 1, 2, 3, 2, 1, 1, 2, 3}, {2, 4, 1, 4, 1, 4, 1, 3, 2, 3}, {{3, 9}, {0, 9}, {0, 7}, {0, 4}, {3, 5}})

各个询问的最优路径如下:

  • (3,9)(3, 9)353 \to 5(花费 11),595 \to 9(花费 22\Rightarrow 总花费:33
  • (0,9)(0, 9)010 \to 1(花费 11),151 \to 5(花费 22),595 \to 9(花费 22\Rightarrow 总花费:55
  • (0,7)(0, 7)010 \to 1(花费 11),151 \to 5(花费 22),575 \to 7(花费 11\Rightarrow 总花费:44
  • (0,4)(0, 4)010 \to 1(花费 11),141 \to 4(花费 22\Rightarrow 总花费:33
  • (3,5)(3, 5)353 \to 5(花费 11\Rightarrow 总花费:11

因此函数应返回 {3,5,4,3,1}\{3, 5, 4, 3, 1\}

数据范围

  • 1n,m5000001 \leq n, m \leq 500000
  • 对所有 0in10 \leq i \leq n - 11v[i],w[i]n1 \leq v[i], w[i] \leq n
  • 对所有询问,0ABn10 \leq A \leq B \leq n - 1

子任务

  1. (5 分)1n300,1m5000001 \leq n \leq 300, 1 \leq m \leq 500000
  2. (7 分)1n3000,1m30001 \leq n \leq 3000, 1 \leq m \leq 3000
  3. (11 分)1n20000,1m200001 \leq n \leq 20000, 1 \leq m \leq 20000
  4. (44 分)1n200000,1m2000001 \leq n \leq 200000, 1 \leq m \leq 200000
  5. (8 分)1n500000,1m5000001 \leq n \leq 500000, 1 \leq m \leq 500000,且对于所有 0i<jn10 \leq i < j \leq n - 1v[i]v[j]v[i] \leq v[j]w[i]w[j]w[i] \leq w[j]
  6. (25 分)无额外限制

翻译由 ChatGPT-5 完成