字首和(一維 二維)

2021-10-25 15:22:31 字數 1583 閱讀 2677

1.一維字首和:

字首和:s[i] = a[1] + a[2] + … a[i];

區間和([l,r]):a[l] + … + a[r] = s[r] - s[l - 1]。

題目795:

輸入乙個長度為n的整數序列。

接下來再輸入m個詢問,每個詢問輸入一對l, r。

對於每個詢問,輸出原序列中從第l個數到第r個數的和。

輸入格式

第一行包含兩個整數n和m。

第二行包含n個整數,表示整數數列。

接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。

輸出格式

共m行,每行輸出乙個詢問的結果。

資料範圍

1≤l≤r≤n,

1≤n,m≤100000,

-1000≤數列中元素的值≤1000

輸入樣例:

5 32 1 3 6 4

1 21 3

2 4輸出樣例:36

10

#include

const

int n =

1e5+10;

int n, m;

int a[n]

=, s[n]=;

//全域性變數可自動初始化為0,可寫可不寫

intmain()

return0;

}

2.二維字首和:子矩陣的和

s[i, j] : 第i行j列格仔左上部分所有元素的和

以(x1, y1)為左上角,(x2, y2)為右下角的子矩陣的和為:

s[x2, y2] - s[x1 - 1, y2] - s[x2, y1 - 1] + s[x1 - 1, y1 - 1]

題目796:

輸入乙個n行m列的整數矩陣,再輸入q個詢問,每個詢問包含四個整數x1, y1, x2, y2,表示乙個子矩陣的左上角座標和右下角座標。

對於每個詢問輸出子矩陣中所有數的和。

輸入格式

第一行包含三個整數n,m,q。

接下來n行,每行包含m個整數,表示整數矩陣。

接下來q行,每行包含四個整數x1, y1, x2, y2,表示一組詢問。

輸出格式

共q行,每行輸出乙個詢問的結果。

資料範圍

1≤n,m≤1000,

1≤q≤200000,

1≤x1≤x2≤n,

1≤y1≤y2≤m,

−1000≤矩陣內元素的值≤1000

輸入樣例:

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

#include

const

int n =

1010

;int n, m, q;

int a[n]

[n], s[n]

[n];

intmain()

return0;

}

一維 二維字首和

基礎知識 一維字首和 s i a 1 a 2 a i a l a r s r s l 1 二維字首和 s i,j 第 i 行 j 列格仔左上部分所有元素的和 以 x1,y1 為左上角,x2,y2 為右下角的子矩陣的和為 s x2,y2 s x1 1,y2 s x2,y1 1 s x1 1,y1 1 ...

一維字首和與二維字首和

什麼是字首和?字首和是乙個陣列的某項下標之前 包括此項元素 的所有陣列元素的和。作用 快速求出某一段區間的總和 such as 求出a 3 a 4 a 15 sum 15 sum 2 sum為字首和 優勢 可以在o 1 的複雜度求出某一部分的總和 設b為字首和陣列,a為原陣列,根據這句話可以得到字首...

字首和演算法 一維字首和 二維字首和

輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示整數數列。接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。輸出格式 共m行,每行輸出乙個詢問的結果。資...