二維字首和

2021-10-16 10:18:34 字數 2884 閱讀 1445

直接看乙個例子

假設給定乙個矩陣

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...