题目:
题解:
这种讲某个区间的数据全部加上某一个值可以用插入的方法。
通过图上的方法,在A点加上n,在B点减去n,这样就在某个区间内插上一个值
初始化方法:
for (int i = 1; i <= m; i++) {
scanf_s("%d", &x);
insert(i, i, x);
}
插入方法:
while (n--)
{
int l, r, c;
scanf_s("%d%d%d", &l, &r, &c);
insert(l, r, c);
}
最后结果即使用前缀和的方法相加。
代码:
#include<iostream>
using namespace std;
const int N = 10010;
int s[N], sum[N] = {0};
int n, m;
void insert(int &l, int &r, int x)
{
s[l] += x;
s[r + 1] -= x;
}
int main()
{
scanf_s("%d%d", &m, &n);
int x;
for (int i = 1; i <= m; i++) {
scanf_s("%d", &x);
insert(i, i, x);
}
while (n--)
{
int l, r, c;
scanf_s("%d%d%d", &l, &r, &c);
insert(l, r, c);
}
for (int i = 1; i <=m; i++)
{
sum[i] = sum[i - 1] + s[i];
}
for (int i = 1; i <=m; i++) printf("%d ", sum[i]);
system("pause");
}