急!?!》<":(C++)

描述

给定一个数组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;
}

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

【以下回答由 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依次输出,相邻数字之间用空格隔开。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^