列舉 優化(7) 字首和1

2021-08-22 19:36:16 字數 521 閱讀 8817

例1

給定乙個長度為n的陣列:a1,a2,…,an。(n <= 100000,1 <= a[i] <= 100000)。然後有m個詢問,每次詢問給兩個整數l,r問a[l]~a[r]的和是多少。(m <= 100000)。

這道題最直接的做法就是每次詢問的時候,用乙個迴圈累加a[l]~a[r]的和,偽**如下:

ask(l,r)

sum = 0

for i = l...r

sum += a[i]

return sum

上面這段偽**,處理乙個詢問的時間複雜度是o(r-l),考慮到r最大是n,l最小是1,所以可以認為是o(n)。而通過字首和,我們可以把每次詢問的複雜度降到o(1)

思路假設我們有這麼乙個陣列:a = [a1,a2,…,an]。我們將a[i]加到a[j]的和稱為部分和,記作s[i,j],上面的題目就是詢問m次部分和。為了減少計算部分和的複雜度,我們先計算出字首和:s[i] = a[1] + a[2] + … + a[i]。字首和可以通過遞推的方法o

列舉 字首和

給乙個3 1e5的數字串,判斷該串中有多少個子串 64 0,0也算,有前導0的不算 例如 64064 64 064 64 0 64 640 64 640 64 64064 括號內即為符合條件的子串,064不符合 這題要利用1000000正好整除64,所以x 1000000 p p的長度小於等於6 只...

Spotlights 思維 字首和優化

原部落格位址 題目鏈結 題目大意 給你乙個n m的空間,其中0表示沒有人,1表示有人,對應乙個好位子以及方向的定義為 首先這個位子不能有人。其次對應這個位子安排乙個照明方向,這個方向上必須有人才行。讓你求一共有多少個這樣滿足的放置方案。思路 1 首先我們o n m 暴力列舉出所有的沒有人的位子。然後...

字首和 (1)什麼是字首和和一維字首和

字首和 prefix sum 的定義為 對於乙個給定的數列 a,它的字首和數列 s 是通過遞推能求出來得 例如 假設陣列a和字首和陣列s都已經定義 int i 初始條件 a 0 0 s 0 0 for i 1 i n i 下面我們用乙個模板題,將完整的一維陣列字首和做乙個簡單的展示。題目鏈結 inc...