描述
给定一个数组A, 接着 M 次更新
每次询问两个整数 L, R,数组从 A[L] 到 A[R] 每个的数值加 1.
请问这个数组请问经过 M 次更新的数字是多少.
输入
每组数据包括三个部分
第一部分两个整数 N, M (1 <= N <= 100000 1<=M<=1000)
第二部分 N 个整数(每个整数范围 [1,10000000])
第三部分 M 行, 每行两个整数 L, R (L, R范围 [1,100000])
输出
请输出更新之后的数组,相邻数字之间用空格隔开.
输入样例 1
10 2
1 2 3 4 5 6 7 8 9 10
1 2
9 10
输出样例 1
2 3 3 4 5 6 7 8 10 11
语言:
C++
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
int arr[n];
for (int i = 0; i < n; i++)
cin >> arr[i];
int a, b;
for (int i = 0; i < m; i++)
{
cin >> a >> b;
for (int j = a; j <= b; j++) arr[j - 1]++;
}
for (int i = 0; i < n; i++)
{
if (i > 0) cout << " ";
cout << arr[i];
}
return 0;
}
【以下回答由 GPT 生成】
根据题目要求,我们需要对数组A进行M次更新。每次更新都会给出一个范围[L, R],需要将A中这个范围内的元素都加1。最后输出更新后的数组A。
首先,我们需要读取输入的N和M,以及数组A的值。
然后,我们使用一个循环,将每次更新的操作执行M次。
在每次更新中,我们需要读取输入的L和R,并且将A中从A[L]到A[R]的元素都加1。即将A[L]、A[L+1]、...、A[R]都加1。
最后,我们输出更新后的数组A。
下面是C++的代码实现:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<int> A(N);
for (int i = 0; i < N; i++) {
cin >> A[i];
}
for (int i = 0; i < M; i++) {
int L, R;
cin >> L >> R;
for (int j = L - 1; j <= R - 1; j++) {
A[j] += 1;
}
}
for (int i = 0; i < N; i++) {
cout << A[i] << " ";
}
return 0;
}
注意:我们将输入数组A的索引从1开始计数,但在代码中数组A的索引是从0开始计数,需要相应地进行转换。更新范围也是要减去1。这是因为在数组中,索引位置是从0开始的。
例如,样例输入中的"1 2"表示更新范围是从A[1]到A[2],而在代码中我们需要将范围转换为从A[0]到A[1]。
最后,我们将更新后的数组A依次输出,相邻数字之间用空格隔开。
【相关推荐】