酷代码 AI
菜单
服务商

c++ 城主一共有n(n<100)名归零者手下,其中第i个人的伤势为ai。城主会提问q次,每次都会询问从第L个人到第R个人之中,谁的伤最严重,也就是最大的ai是多少。 输入: 第一行输入n、q。 紧接着一行输入n个数ai,代表每个人的伤势。 接下来q行,每行两个数L与R,代表每次询问的范围。 输出: 输出共q行,每行为对应问题的答案。

以下是解决该问题的C++代码: ```cpp #include <iostream> #include <vector> // 主函数 int main() { int n, q; // 输入归零者手下的人数n和询问次数q std::cin >> n >> q; // 存储每个人的伤势 std::vector<int> injuries(n); for (int i = 0; i < n; ++i) { std::cin >> injuries[i]; } // 处理每次询问 for (int i = 0; i < q; ++i) { int L, R; // 输入每次询问的范围 std::cin >> L >> R; // 调整为0索引 L--; R--; // 初始化最大伤势为范围内第一个人的伤势 int max_injury = injuries[L]; // 遍历范围内的每个人 for (int j = L; j <= R; ++j) { // 如果当前人的伤势比最大伤势大,则更新最大伤势 if (injuries[j] > max_injury) { max_injury = injuries[j]; } } // 输出本次询问的最大伤势 std::cout << max_injury << std::endl; } return 0; } ``` 代码说明: 1. 输入部分:首先读取归零者手下的人数`n`和询问次数`q`。然后读取每个人的伤势并存储在`injuries`向量中。 2. 询问处理:对于每次询问,读取询问的范围`L`和`R`,并将其调整为0索引。然后遍历该范围内的每个人,找出最大的伤势。 3. 输出部分:输出每次询问的最大伤势。 复杂度分析: - 时间复杂度:每次询问需要遍历范围内的所有人,因此每次询问的时间复杂度为$O(R - L + 1)$。总共进行`q`次询问,因此总的时间复杂度为$O(q * (R - L + 1))$。 - 空间复杂度:主要用于存储每个人的伤势,因此空间复杂度为$O(n)$。 [2026-01-09 19:34:19 | AI问答 | 504点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多