一维差分

假设现在对如下数组进行差分求解:1 2 3 4 5 6
假设要对区间位置2到3的位置进行统一的加2操作,
再对位置3到5进行统一的减6操作

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main() {
 5     int n, m, num[10], diff[10];
 6     cin >> n >> m; // 输入的n表示数组元素个数,m表示一共想进行多少次差分数组的统一操作
 7     for (int i = 1; i <= n; i++) {
 8         cin >> num[i];    // 初始化数组里的数据
 9     }
10     for (int i = 1; i <= n; i++) {
11         diff[i] = num[i] - num[i - 1];  // 差分数组初始化
12     }
13     for (int i = 0; i < m; i++) {
14         int a, b, c;
15         cin >> a >> b >> c;  //  a,b,c分别表示区间起止和需要修改的值
16         diff[a] += c;        // 差分数组的第a号位置 +c     
17         diff[b + 1] -= c;    // 差分数组的第b+1号位置 -c
18     }
19     for(int i=1;i<=n;i++){        // 把差分数组还原到原数组中去
20         num[i]=num[i-1]+diff[i];
21     }
22     for(int i=1;i<=n;i++){        //  输出操作后的数组里的值
23         cout<<num[i]<<" ";
24     }
25 
26     return 0;
27 }
差分的方法

 

posted @ 2025-01-05 16:28  TP_003  阅读(8)  评论(0)    收藏  举报