一维差分
假设现在对如下数组进行差分求解: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 }

浙公网安备 33010602011771号