**算法筆記-差分和前綴和**

算法筆記-差分和前綴和

差分
就是將數列中的每一項分別與前一項數做差,例如:

一個序列1 2 5 4 7 3,差分後得到1 1 3 -1 3 -4 -3

差分求前綴和=原序列

將原序列區間[L,R]中的元素全部+1,可以轉化操作爲差分序列L處+1,R+1處-1

二維情況可視作多個一維;

for(int i=1;i<=m;i++){
		cin>>x1>>y1>>x2>>y2;
		for(int j=x1;j<=x2;j++){
			a[j][y1]+=1;
			a[j][y2+1]-=1;
		}
	}

前綴和
一維前綴和:每一項+=前一項

二維前綴和:點(i,j)到原點這個矩陣所有元素的和;

二維前綴和的求法 : f[i][j]=f[i−1][j]+f[i][j−1]−f[i−1][j−1]+a[i][j];

求子矩陣的前綴和;

for(register int i = 1;i <= k;++ i)
	{
		int x1,x2,y1,y2;//x1,y1是左上角的座標,另一對是右下角的座標 
		cin >> x1 >> y1 >> x2 >> y2;
		cout << f[x2][y2] - f[x1 - 1][y2] - f[x2][y1 - 1] + f[x1 - 1][y1 - 1]; 
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章