直接看乙個例子
假設給定乙個矩陣
1 2 4 3
5 1 2 4
6 3 5 9
那麼,可以推出他的二維字首和矩陣為
1 3 7 10
691522
121829 45
在二維字首和陣列中,9 = 1 + 2 + 5 + 1
15 = 1 + 2 + 5 + 1 + 4 + 2
18 = 1+ 5 + 6 + 2 + 1 + 3… …
即二位字首和陣列中第 i 行第 j 列的數值等於原陣列中第 i 行第 j 列之前(即左上角)所有數的和
圖中我們標註出四個點。
紅色點表示(x,y)字首和,用sum[x][y]表示。
藍色表示(x,y-1)字首和,用sum[x][y-1]表示。
黃色表示(x-1,y)字首和,用sum[x-1][y]表示。
紫色表示(x-1,y-1)字首和,用sum[x-1][y-1]表示。
假設第 i 行第 j 列對應的陣列為 aij ,二位字首和為 sumij ,由容斥原理,得
例題原題鏈結
題目描述
求乙個 n*m 大小的二維矩陣對應的字首和。
輸入第一行 2 個正整數:n 和 m,n 和 m 範圍在[1, 1000]。
其後 n 行,每行 m 個正整數:範圍在[1, 10000]。
輸出對應二維陣列的字首和。
樣例輸入
3 41 2 4 3
5 1 2 4
6 3 5 9
樣例輸出
1 3 7 10
6 9 15 22
12 18 29 45
樣例通過可惜**超時了,有大佬能給出過題**萬分感謝
#include
#include
using
namespace std;
const
int n =
1010
;long
long prefixsum[n]
[n];
//字首和陣列
int nums[n]
[n];
//原陣列
intmain()
//輸出
for(
int i =
1;i <= n;i++
)puts(""
);}return0;
}
二維字首和的應用輸入乙個n行m列的整數矩陣,再輸出q個詢問,每個詢問包含四個整數x1,x2,y1,y2,表示乙個子矩陣的左上角座標和右下角座標。對於每個詢問輸出子矩陣中所有數的和
下圖有灰、黃、藍和綠四種顏色,每個顏色表示乙個區域。假設我們要求圖中綠色部分的字首和。
設對應座標為(x,y)的資料字首和用s(x,y)表示
①對於整個區域:左上角為(1,1),右下角為(4,4),對應的字首和為s(4,4)
②對於灰色區域:左上角為(1,1),右下角為(2,2),對應的字首和為s(2,2)
③對於黃色區域:對應的字首和為s(2,4) - s(2,2)
④對於藍色區域:對應的字首和為s(4,2) - s(2,2)
⑤對於綠色區域:對應的字首和為s(4,4) - s(2,4) - (4,2) + (2,2)
最後,給出左上角和右下角的兩點(x1,y1) (x2,y2),通過公式s(x2,y2) - s(x1 - 1,y2) - s(x2,y1 - 1) + s(x1 - 1,y1 - 1)可以計算出在該範圍內/子矩陣中所有數的和
例題原題鏈結
題目描述
輸入乙個 n 行 m 列的整數矩陣,再輸入 q 個詢問,每個詢問包含四個整數 x1,y1,x2,y2,表示乙個子矩陣的左上角座標和右下角座標。
對於每個詢問輸出子矩陣中所有數的和。
輸入第一行包含三個整數 n,m,q。
接下來 n 行,每行包含 m 個整數,表示整數矩陣。
接下來 q 行,每行包含四個整數 x1,y1,x2,y2,表示一組詢問。
輸出共 q 行,每行輸出乙個詢問的結果。
樣例輸入
3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4
樣例輸出
1727
21提示
【資料範圍】
1 ≤ n, m ≤ 1000,
1 ≤ q ≤ 200000,
1 ≤ x1 ≤ x2 ≤ n,
1 ≤ y1 ≤ y2 ≤ m,
−1000 ≤ 矩陣內元素的值 ≤ 1000
#include
#include
using
namespace std;
const
int n =
1010
;int nums[n]
[n];
//原陣列
int prefixsum[n]
[n];
//字首和陣列
intmain()
//q次迴圈
for(
int i =
0;i < q;i++
)return0;
}
二維字首和
時間限制 1 sec 記憶體限制 128 mb 提交 155 解決 51 提交 狀態 討論版 命題人 admin 題目描述 一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 10000 個目標,用整數xi,yi 0 xi,yi 5000 表示目標在地圖上的位置,每個...
二維字首和
1 二維字首和 模板 二維字首和 模板題 acwing 796.子矩陣的和 s i,j 第i行j列格仔左上部分所有元素的和 1.以 x1,y1 為左上角,x2,y2 為右下角的子矩陣的和為 s x2 y2 s x1 1 y2 s x2 y1 1 s x1 1 y1 1 s x y s x y 1 s...
二維字首和
學習了字首和,又想來搞二維字首和了 二維字首和 建立乙個矩陣,求矩陣內子矩陣內所有數的和。下面給乙個n m的矩陣,給定左上角座標 x1,y1 和右下角座標,求右下角座標 x2,y2 求子矩陣內元素的和。讓我們先初始化乙個二維陣列,並讀入一些資料,下面是 和輸出 int a 11 11 s 11 11...