差分,就是求本位与前一个的差.
d[i]=a[i]-a[i-1]
一维差分一遍for循环就出来了呀.
有什么用呢?
这种:
1、将区间【1,4】的数值全部加上3
2、将区间【3,5】的数值全部减去5
在某一个数组全部加上或者减去某个东西,就可以用差分数组.
举个例子嗷嗷嗷
1 #include <iostream> 2 #include <set> 3 #include <cstring> 4 #include <stdio.h> 5 using namespace std; 6 //二维前缀和 7 int b[5][5]={0}; 8 int a[5][5]; 9 int a1[5]; 10 int b1[5]; 11 12 13 14 15 16 int org[100]={0}; 17 int bios[100]={0}; 18 int n; 19 int main(){ 20 while(scanf("%d",&n) && n){ 21 int begin; 22 int end; 23 for (int i = 1; i <= n; ++i) { 24 scanf("%d",&begin); 25 scanf("%d",&end); 26 bios[begin]++; 27 bios[end+1]--; 28 } 29 for (int j = 1; j <= n; ++j) { 30 org[j]=org[j-1]+bios[j]; 31 32 33 } 34 for (int k = 1; k <= n ; ++k) { 35 cout<<org[k]<<" "; 36 37 } 38 39 } 40 41 42 43 44 45 46 }