演算法基礎課 字首和

2021-10-08 11:19:51 字數 858 閱讀 9129

通常,求乙個陣列中間序列的和,可以遍歷一次,這樣的時間複雜度是o(n)。如果需要頻繁獲得這個和,那麼每次都要重新計算一遍。

為了提高效率,可以提前計算乙個字首和陣列,每次查詢任意乙個區間的和時,用s[right] - s[left]就可以了。

輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l, r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。

輸入格式

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

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

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

輸出格式

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

資料範圍

1≤l≤r≤n,

1≤n,m≤100000, 【注意這裡的m很大,會造成時間成本高】

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

輸入樣例:

5 3

2 1 3 6 4

1 21 3

2 4

輸出樣例:

3610

#include

using

namespace std;

const

int n=

1e6+10;

int a[n]

,s[n]

;//預設初始化為0

intmain()

return0;

}

演算法基礎課 字首和與差分

對於字首和 實質上就是背公式,對於字首和分一維和二維首先應該是一維字首和的公式 s i s i 1 a i a i a i 1 常用的就是這兩個公式,對於字首和實質就是某一段區間的和。作用 求出某一段區間的和。比如說對於 l,r 這個區間,我們應該做的就是s r s l 1 即可。對於二維字首和我們...

左神基礎課 字首樹

插入 得到待插入字串的長度,每次從上到下生成節點插入進去 就是相當於尾插法生成鍊錶 但如果我們要生成的節點本來就已經有了,那麼我們就直接到下面的節點裡去。在這個步驟的迴圈中,每次都要把當前節點的pass 1,表示有乙個串要經過該節點。到了最終的尾節點,把end 1 優化 每次我們都判斷當前節點pas...

演算法基礎課筆記

方法步驟 1 確定分界點。一般取q l q r q l r 2 作為樞紐。2 調整區間,左邊的都是小於等於樞紐值,右邊的都是大於等於樞紐值。最重要 3 遞迴處理左右兩段。快速排序模板 void quick sort int q int l int r quick sort q,l,j quick s...