#P13691. [CEOI 2025] highest

    ID: 15180 远端评测题 5000ms 1024MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>倍增2025交互题CEOI(中欧)ST 表

[CEOI 2025] highest

题目描述

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

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

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

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

输入格式

你需要实现以下函数:

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

提示

样例解释 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 滴血的跳跃:从 00 到 11(虽然可以直接跳到 22,但从 11 出发能走得更远),然后从 11 到 44。总花费:1+1=21 + 1 = 2。

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

  1. 0→10 \to 1(花费 11),1→41 \to 4(花费 11),4→54 \to 5(花费 11);
  2. 0→10 \to 1(花费 11),1→51 \to 5(花费 22)。

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

对于第三个询问 (0,6)(0, 6),一种花费 44 的路径是 0→10 \to 1(花费 11),1→51 \to 5(花费 22),5→65 \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):3→53 \to 5(花费 11),5→95 \to 9(花费 22)⇒\Rightarrow 总花费:33
  • (0,9)(0, 9):0→10 \to 1(花费 11),1→51 \to 5(花费 22),5→95 \to 9(花费 22)⇒\Rightarrow 总花费:55
  • (0,7)(0, 7):0→10 \to 1(花费 11),1→51 \to 5(花费 22),5→75 \to 7(花费 11)⇒\Rightarrow 总花费:44
  • (0,4)(0, 4):0→10 \to 1(花费 11),1→41 \to 4(花费 22)⇒\Rightarrow 总花费:33
  • (3,5)(3, 5):3→53 \to 5(花费 11)⇒\Rightarrow 总花费:11

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

数据范围

  • 1≤n,m≤5000001 \leq n, m \leq 500000
  • 对所有 0≤i≤n−10 \leq i \leq n - 1,1≤v[i],w[i]≤n1 \leq v[i], w[i] \leq n
  • 对所有询问,0≤A≤B≤n−10 \leq A \leq B \leq n - 1

子任务

  1. (5 分)1≤n≤300,1≤m≤5000001 \leq n \leq 300, 1 \leq m \leq 500000
  2. (7 分)1≤n≤3000,1≤m≤30001 \leq n \leq 3000, 1 \leq m \leq 3000
  3. (11 分)1≤n≤20000,1≤m≤200001 \leq n \leq 20000, 1 \leq m \leq 20000
  4. (44 分)1≤n≤200000,1≤m≤2000001 \leq n \leq 200000, 1 \leq m \leq 200000
  5. (8 分)1≤n≤500000,1≤m≤5000001 \leq n \leq 500000, 1 \leq m \leq 500000,且对于所有 0≤i<j≤n−10 \leq i < j \leq n - 1,v[i]≤v[j]v[i] \leq v[j] 且 w[i]≤w[j]w[i] \leq w[j]
  6. (25 分)无额外限制

翻译由 ChatGPT-5 完成