给定一个长度为 N 的数列,和 M 次询问,求出每一次询问的区间内数字的最大值。 输入 第一行包含两个整数 N,M,分别表示数列的长度和询问的个数。 第二行包含 N 个整数(记为 a_i),依次表示数列的第 i 项。 接下来 M行,每行包含两个整数 l_i,r_i,表示查询的区间为 [l_i,r_i]。 输出 输出包含 M 行,每行一个整数,依次表示每一次询问的结果。
时间: 2024-04-17 13:23:16 浏览: 174
输入两个非负整数m,n(n>=m) 输出m,n区间的所有平方数之和 例如: 输入: 4,9 输出: 13
以下是一个解决该问题的示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 获取区间内的最大值
int getMaxInRange(const vector<int>& nums, int left, int right) {
int maxVal = nums[left];
for (int i = left + 1; i <= right; i++) {
if (nums[i] > maxVal) {
maxVal = nums[i];
}
}
return maxVal;
}
int main() {
int N, M;
cin >> N >> M;
vector<int> nums(N);
for (int i = 0; i < N; i++) {
cin >> nums[i];
}
for (int i = 0; i < M; i++) {
int left, right;
cin >> left >> right;
int maxVal = getMaxInRange(nums, left - 1, right - 1);
cout << maxVal << endl;
}
return 0;
}
```
该代码首先读取输入的数列长度N和询问个数M。然后读取数列的元素,并将它们存储在一个vector中。接下来,通过循环处理M次询问,每次读取查询的左右边界,并调用`getMaxInRange`函数来获取指定区间内的最大值。最后,将每次询问的结果打印输出。
请注意,该代码假设查询的边界是合法的,即1 <= l_i <= r_i <= N。在实际应用中,可能需要根据具体情况进行边界检查和错误处理。
阅读全文